Integer的最大值


來自:https://blog.csdn.net/qq_33611068/article/details/77369050

 

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

1 int temp = 0;
2 Date dt1 = new Date();
3 long begintime = dt1.getTime();
4 for(int i=0;i<=Integer.MAX_VALUE;i++){
5     temp = i;
6 }
7 Date dt2 = new Date();
8 long endtime = dt2.getTime();
9 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循環永遠都不會執行完畢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM