Integer 的快取問題

2021-09-24 08:06:32 字數 570 閱讀 1729

integer 的快取:首先說的integer的快取問題。先列舉一下**。

我們發現,居然出現了不同的情況。當值為100的時候,兩個引用居然是相同的。當值為128的時候,兩個引用居然不相同了。

這是什麼情況呢?

要知道這個問題的原因,我們首先得了解一下integer這個包裝類的源**。

從這裡可以看出,integer包裝類裡面如果值為【-128,127】範圍內的話,那麼就直接從快取裡面取值。

而jvm在初始化的時候,就已經將【-128,127】的值初始化了,也就是說,後續的integer如果值是在這個範圍內的話,那麼獲取的都是同乙個物件引用了。

如果不在這個範圍內,那麼就是傳統的獲取乙個新的物件了。當然即使是在這個取值範圍內,但是如果也通過new的方式獲取的值,也同樣獲取的是不同的物件了。例如:

integer a=new integer(100);

integer b=new integer(100);

複製**

但是a==b來判斷的話,會發現值為false。這是因為這兩個物件都是new出來的,和integer的快取機制沒有關係了。

Integer類的快取機制

檢視integer的原始碼,就會發現裡面有個靜態內部類。該類的作用是將數值等於 128 127 預設 區間的integer例項快取到cache陣列中。通過valueof 方法很明顯發現,當再次建立值在 128 127區間的integer例項時,會復用快取中的例項,也就是直接指向快取中的integer...

Integer的快取( 128到127)

先上原始碼 returns an instance representing the specified value.if a new instance is not required,this method should generally be used in preference to the...

Integer 中的快取類IntegerCache

題目 public class test 結果是 true false true可是為什麼呢?翻閱dk的原始碼,發現 public static integer valueof string s throws numberformatexception public static integer v...