與Integer內部定義的IntegerCache結構相關的面試題

關於Integer的一道面試題,一個隱含知識點
下面面試題要求判斷i==j,m==n,x==y返回值true還是false

在這裏插入圖片描述

1.首先判斷第一問,我們可以很自然的知道因爲i 和 j分別new了新對象,那麼地址值不
同,所以它不等,返回false。
2.然後判斷第二,三問,這裏涉及到自動裝箱,m==n返回true,但x==y返回false,這是
爲什麼?這裏其實涉及到源碼的問題,隱含了一個知識點

在integer中定義了一個內部類IntegerCache,這個類中定義了一個數組cache[],這個數組
中存了一些數,從-128~127,由於這些數使用的比較頻繁,那麼爲了提升性能,提前加載
好了這些數在緩存裏,不用每次用的時候重新造,當使用自動裝箱的功能時,先從這數組
中找,那麼1在這-128~127範圍內,那麼就直接在這裏面找,我再來一個1.又在這數據中
找,那麼它們的地址是一樣的,所以m==n返回true。而128不在這範圍內,怎麼辦?那隻
能重新new,再來一個128,又得重新new,那麼地址值不同,所以x==y返回false

在這裏插入圖片描述

發佈了11 篇原創文章 · 獲贊 6 · 訪問量 1908
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章