為什麼127=127為真,但是128=128則為假
最新
05-12
直接上代碼,如下圖所示。
定義四個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:磊哥談技術 |