2013-03-17 95 views
4

1.這個java for循環條件有什麼問題?

for (int i = 0; (boolean)true; i++) { 

} 

2.

for (int i = 0; (boolean)false; i++) { 

} 

3.

boolean t=false; 
for (int i = 0; t; i++) { 

} 

第一個for循環編譯 & 運行,但第二個for循環compilation fails with error。它說Unreachable Statement。而第三個循環編譯 & 運行

+2

現在,如果您在'boolean t = false;'之前添加'final',它將不會再次編譯。這完全是關於編譯器可以保證的。 – 2013-03-17 07:13:54

回答

4

第一個循環是無限循環。由於條件是總是爲真,並且總會得到滿足。

這就像寫:

int i=0; 
while(true) 
    i++; 

正如你所看到的,該條件始終true並沒有什麼變化這是真的。

第二個循環是Unreachable code,因爲永遠不會到達此循環下面的一段代碼(false永遠是false,您永遠不會更改它)。所以這是多餘的。

請參閱第14.21節。 Unreachable Statements

由於Java知道程序員是人類:)它會通知你這個以防止錯誤。

注意while(false)或者你有第二循環從if(false)...不同,因爲while(false)(或者你有循環)是沒有意義的,因爲它下面的代碼將不被執行。不像if(false)可能有else,所以在這種情況下編譯器不會抱怨它。


關於OP更新:

在第三種情況下不會有任何編譯錯誤,因爲false值分配給變量和在這種情況下,該變量可以被重新分配到它有true的價值。所以編譯器不會出現錯誤。 請注意,如果變量被聲明爲final,那麼編譯器會出現錯誤,因爲此變量永遠不會被分配給新值,因此for循環下的代碼將爲無法訪問

+1

+1對於更新(我即將添加)。一個簡單的可能是雙循環。 – dreamcrash 2013-03-17 07:11:58

+0

不錯的答案+1。 – gontard 2013-03-17 07:23:44

0

在第二for環,條件是總是false所以for塊(即使是空的)將永遠不會被執行(它是unreacheable)。

像在這種情況下:

if (false) { 
} 
0
for (int i = 0; <This_has_to_be_true>; i++) 

的for循環的第二部分必須是真實的循環來執行。由於您手動將其設置爲fase,所以循環將永遠不會運行,因此它內部的代碼無法訪問。

0

編譯器告訴你第二個循環內部的代碼(即使是空的)從不會到達並執行,因爲條件總是false

順便說一句,爲什麼你試圖做到這一點?