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...