Integer 的緩存問題

Integer 的緩存:首先說的Integer的緩存問題。先列舉一下代碼。 緩存

////////////////////////////////////////////////////////////////////////////////////////////////
咱們發現,竟然出現了不一樣的狀況。當值爲100的時候,兩個引用竟然是相同的。當值爲128的時候,兩個引用竟然不相同了。

這是什麼狀況呢?spa

要知道這個問題的緣由,咱們首先得了解一下Integer這個包裝類的源代碼。code

從這裏能夠看出,Integer包裝類裏面若是值爲【-128,127】範圍內的話,那麼就直接從緩存裏面取值。

而JVM在初始化的時候,就已經將【-128,127】的值初始化了,也就是說,後續的Integer若是值是在這個範圍內的話,那麼獲取的都是同一個對象引用了。cdn

若是不在這個範圍內,那麼就是傳統的獲取一個新的對象了。固然即便是在這個取值範圍內,可是若是也經過new的方式獲取的值,也一樣獲取的是不一樣的對象了。例如:對象

Integer a=new Integer(100);

Integer b=new Integer(100);
複製代碼

可是a==b來判斷的話,會發現值爲false。這是由於這兩個對象都是new出來的,和Integer的緩存機制沒有關係了。blog

相關文章
相關標籤/搜索