我試圖找出爲什麼這個循環終止...當RHS == Integer.MAX_VALUE時,int的布爾比較,爲什麼這個循環終止?
@Test
public void test() {
int counter=0;
int from = 0;
int until = Integer.MAX_VALUE;
while(counter <= until) {
counter++;
if(counter < from) {
System.out.println("continuing " + counter + " <= " + from);
continue;
}
}
System.out.println("finished " + counter);
}
while(counter <= until)
應該始終解析爲true
因爲計數器不能超過Integer.MAX_VALUE的增加。因此,循環不應該終止。
然而,在Eclipse中,如果我用JUnit運行運行我得到:
finished 108772
如果我在調試器中運行,我得到:
finished 125156
在if(counter < from)
的輸出是從來沒有輸出。如果我刪除該塊,代碼仍然終止,這次是Integer.MAX_VALUE。
finished 2147483647
我不希望這會終止。一個'int'總是'<= Integer.MAX_VALUE'。 –
它終止於'int until = Integer.MAX_VALUE-1;' –
這很奇怪。對我而言,大多數時候它會給出大約30萬的不一致的值。我認爲它必須是某種編譯器優化,因爲它肯定不應該終止。現在看看它... – gandaliter