當前位置:
首頁 > 最新 > 為什麼127=127為真,但是128=128則為假

為什麼127=127為真,但是128=128則為假

直接上代碼,如下圖所示。

定義四個Integer類型的變數a,b,c,d,分別賦值127,127,128,128。然後直接用==分別比較a,b和c,d的值,得到的結果如下圖所示。

是不是很神奇?要想弄明白原因,只有去看jdk的源碼了。像a=127這種將java基本類型賦值給java封裝類型的命令 ,叫做自動裝箱。他的真正執行過程是a=Integer.valueOf(127),接下來,我們看一下valueOf的函數定義。

通過函數我們可以看出,當參數的值在IntegerCache.low和IntegerCache.high之間時,會從IntegerCache.cache數組中取值,否則就創建一個Integer對象。我們繼續看一下IntegerCache類的定義如下圖所示。

我們可以看到java對在-128和127之間的數值進行了緩存,當然了最大值不一定固定為127,可以通過java.lang.Integer.IntegerCache.high指定適合自己應用的值。java對這個範圍內的數值進行緩存,無非就是為了避免頻繁的創建對象,從而降低內存的使用,提高系統的性能。因為按常理來說,-128和127之間的整數值是使用頻繁的一個數值範圍。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 磊哥談技術 的精彩文章:

TAG:磊哥談技術 |