Integer

有一個很經(jīng)典的問題如下:

Integer a = 127;

Integer b = 127;

System.out.println(a == b);

Integer c = 128;

Integer d = 128;

System.out.println(c == d);

都知道第一個答案是true第二個答案是false,為什么呢?

這里就涉及到j(luò)ava語言的拆箱和裝箱操作了,Integer c=128 這個賦值操作其實是這樣的,128是個int,要想賦值給包裝類型Integer就須要進行裝箱操作,調(diào)用到的是Integer.valueOf(int i)方法,我們可以看看這個方法的源碼:


如果這個i值在IntegerCache.low與IntegerCache.high之間,那么就會返回IntegerCache類中的一個緩存數(shù)組中的值,說白了就是Integer其實會把一些數(shù)字進行緩存,其它的數(shù)字才會進行new Integer()操作,這就很好解釋了為嘛一個是true一個是false了,另外還說一點,IntegerCache中定義了low是-128,是一個固定值,但是high并沒有固定,只是JLS中規(guī)定至少要127,所以如果你主動修改vm options的話是可以把high變的更大的,如果大于128了那么128也會緩存,這樣的話,結(jié)果就是true了。



?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容