3 回答

TA貢獻1943條經驗 獲得超7個贊
此代碼不是無限循環。
i由于整數溢出,最終將變為負數。它將溢出到Integer.MIN_VALUE,并最終達到-1。
但是,當您包含該打印語句時,需要很長時間才能完成(它必須打印超過 40 億個 的值i),因此它似乎是無窮無盡的。
當您刪除打印語句時,它會變得更快。
也就是說,如果編譯器決定循環什么都不做,它甚至可能決定優化整個循環,這會將運行時間減少到 0。
如果您添加一個僅打印少數值的條件,您可以看到即使使用該println語句,循環也會終止,這將使執行速度更快。
例如,每 1 億個值打印一次:
public static void main(String[] args) {
int i=0;
while(true) {
i++;
if (i%100000000 == 0) System.out.println(i);
if(i==-1){
break;
}
}
}
將輸出:
100000000
200000000
300000000
400000000
500000000
600000000
700000000
800000000
900000000
1000000000
1100000000
1200000000
1300000000
1400000000
1500000000
1600000000
1700000000
1800000000
1900000000
2000000000
2100000000
-2100000000
-2000000000
-1900000000
-1800000000
-1700000000
-1600000000
-1500000000
-1400000000
-1300000000
-1200000000
-1100000000
-1000000000
-900000000
-800000000
-700000000
-600000000
-500000000
-400000000
-300000000
-200000000
-100000000
并終止。

TA貢獻1772條經驗 獲得超8個贊
好吧,不完全確定你的意思,但循環不是無窮無盡的。
由于整數溢出,i
最終會變成的值,-1
循環終止。
打印i
與否都沒有關系。只是將所有內容寫入控制臺需要更長的時間。
添加回答
舉報