java:警惕Integer.MAX_VALUE造成的死循環

有這樣一道題:
編程測試,遍歷 0 到 int所能表示最大的正數,將消耗的時間打印。
下面是我的代碼:

int temp = 0;
Date dt1 = new Date();
long begintime = dt1.getTime();
for(int i=0;i<=Integer.MAX_VALUE;i++){
    temp = i;
}
Date dt2 = new Date();
long endtime = dt2.getTime();
System.out.println(endtime - begintime);

這段代碼是會陷入死循環的,就死在了for裏面。
剛開始的時候我還以爲是這個數字太大了,一時半會兒遍歷不到,我就將這個數字打印了一下:結果是2147483647。然後我就將代碼中的Integer.MAX_VALUE逐步換成1000000,5000000,……,逐漸逼近這個數,等到換到21億的時候,我發現還是可以快速執行完畢的。
然後我就懷疑是Integer.MAX__VALUE屬性出現了某種問題,就將其換成了2147483647,還是死循環,看來懷疑錯了,問題還是出現在這個數字身上。
這時候我再一次的檢查了一次for循環,重點檢查了終止條件,果然是這裏出了問題,看我的for循環:

for(int i=0;i<=Integer.MAX_VALUE;i++){
    temp = i;
}

只有當i比int最大值大的時候才能結束循環,可問題是……
i本身就是int類型的,它怎麼可能比int的最大值還大!!!
for循環運行到 i = Integer.MAX_VALUE ,即 i = 2147483647,i再加1,就變成了-2147483648

(這個地方明白源碼,反碼,補碼的同學已經懂了吧,不明白的等我詳細的整理一個專題或者留言詢問……請關注我)
這個數與int最大值來比較,結果顯然,要比最大值小,循環繼續執行,重複這個過程,for循環永遠都不會執行完畢。

歡迎指正,歡迎留言,每天都會有編程相關經驗上傳,歡迎關注!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章