2013-04-13 53 views
30

Java中無限循環的約定是什麼?我應該寫while(true)還是for(;;)?我個人會使用while(true),因爲我經常使用while循環。Java:無限循環公約

+6

我寧願做'while(running)',所以我有辦法擺脫它。 – NilsH

+2

'break'可以離開。 (;;)不太好, – Justin

+5

。雖然(運行)是_LOT_更具可讀性 – radai

回答

66

while(true)for(;;)之間的字節碼沒有差別,但我更喜歡while(true),因爲它不那麼容易混淆(特別是對於新來的Java人)。

您可以使用此代碼示例

void test1(){ 
    for (;;){ 
     System.out.println("hello"); 
    } 
} 
void test2(){ 
    while(true){ 
     System.out.println("world"); 
    } 
} 

當您使用命令javap -c ClassWithThoseMethods檢查它,你會得到

void test1(); 
    Code: 
     0: getstatic  #15     // Field java/lang/System.out:Ljava/io/PrintStream; 
     3: ldc   #21     // String hello 
     5: invokevirtual #23     // Method java/io/PrintStream.println:(Ljava/lang/String;)V 
     8: goto   0 

    void test2(); 
    Code: 
     0: getstatic  #15     // Field java/lang/System.out:Ljava/io/PrintStream; 
     3: ldc   #31     // String world 
     5: invokevirtual #23     // Method java/io/PrintStream.println:(Ljava/lang/String;)V 
     8: goto   0 

這表明相同的結構(除了「你好」與「世界」的字符串)。

+9

+1:用於解釋 – Aubin

+1

+1用於區分「簡單」閱讀和*理解*。其他答案都沒有成功。 – ChiefTwoPencils

+1

我認爲現在是時候讓Java想出一個無限循環結構,所以我們不需要像其他語言一樣的解決方法。我可以建議'do {}'不需要'while',或者簡單地'loop {}'。 –

12

我更喜歡while(true),因爲我使用while循環的次數少於循環次數。 For循環有更好的用途,並且while(true)for(;;)更清潔易讀

+1

另一個支持while(true)的論點是可維護性:真實可能會成爲未來的邏輯條件 – Aubin

+5

@Aubin OTOH,因爲(;;)'在打高爾夫球時更加愉快 –

+3

@Aubin, for'!只需將其粘貼在「for(; condition(););'中即可。使用'for'也意味着你可以很容易地添加一個變量來計算循環的迭代次數(或者其他'迭代次數'),在兩個semicola的第二個之後。 – AJMansfield

6

這取決於你。我認爲這樣的事情沒有約定。你可以使用while(true)for(;;)

我會說我經常遇到while(true)在源代碼。 for(;;)不太經常使用且難以閱讀。

+1

支持while(true)的另一個論點是可維護性:真實可能會成爲未來的邏輯條件 – Aubin

+0

沒有什麼「難於閱讀」關於......的三字母詞。 – ChiefTwoPencils

3

最終,它是您的選擇。以下Java參考使用for (;;)格式:The for Statement

但是,在我的經驗中,while(true)更常用於無限循環。

+0

+1作爲參考 – Aubin

+0

並且[while和do-while語句](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html)用'while(true)' – Justin

0

for(;;)糟透了,對於新手來說是完全不直觀的。請改用while(true)