如下代碼:
public class Example026 {
public static final int END = Integer.MAX_VALUE;
public static final int START = END - 100;
public static void main(String[] args) {
int count = 0;
for (int i = START; i <= END; i++) {
count++;
System.out.println(count);
}
System.out.println(count);
}
}
輸出說明:
循環打印整型所能表示範圍內的所有數字且程序無法正確退出。
代碼分析:
上述代碼中循環控制變量i的起始值爲int的最大值減去100,終止條件爲小於等於int的最大值。循環開始運行後,當i的值等於END時,i++,這時i的值超過了int的表示範圍,導致溢出,i的值變爲整型的最小值。當再次將i與END進行判斷時,循環條件成立,繼續運行。每次當循環條件的值等於整型最大值時就會加1溢出,重新運行。所以上述程序的最終結果就是無法正確退出。
對於上述代碼的一種改進策略是將循環控制條件的類型由int改爲long。這樣,在i的值等於整型最大值時,加1不會溢出,循環就能正常終止了。
當然也可以將代碼改換一種寫法(保證循環能夠執行101次而不是100次),如下所示:
int count = 0;
int i = START;
do {
count++;
} while (i != END);
(注:本【java解惑】系列,均是博主閱讀《java解惑》原書後,將原書上的講解和例子部分改編,然後寫成博文進行發佈的。所有例子均親自測試通過,並共享在github上。通過這些例子,激勵自己,惠及他人。同時,本系列所有博文會同步發佈在博主個人微信公衆號(搜索“愛題猿”或者“ape_it”),方便大家閱讀。如果文中有任何侵犯原作者權利的內容,請及時告知博主,以便及時刪除;如果讀者對文中的內容有異議或者問題,歡迎通過博客留言或者微信公衆號留言等方式共同探討。)
源代碼地址:https://github.com/rocwinger/java-disabuse
本文出自 “winger” 博客,謝絕轉載!