Integer解讀

在這裏插入圖片描述
在這裏插入圖片描述
涉及自動裝箱和拆箱的過程。
源碼:
在這裏插入圖片描述
1、使用自動裝箱(Integer i = 1)方式創建Integer對象時,會使用valueOf進行Integer對象的初始化,此時,會調用IntegerCache.high,這是需要對IntegerCache這個靜態內部類進行初始化。
2、IntegerCache類中有一個cache數組,在加載IntegerCache的時候,會將-128到127的Integer對象都創建了,並存到cache數組中,然後在判斷當前初始化的Integer對象的值是否在-128到127之間,如果是,就直接從cache緩存中取,如果不存在,則new一個新的Integer對象。
3、之後再使用自動裝箱的方式創建Integer對象時,值在-128到127之間時會直接從cache緩存中取。

使用自動裝箱的方式創建的Integer對象,兩者進行比較時,只要其值相等就是ture。而不在-128到127之間的,比較時會新new一個對象,而導致比較結果爲false。
這個是Integer的緩存策略,用來節省內存和提高性能。整型對象在內部實現中通過使用相同的對象引用實現了緩存和重用。
注意:Integer的最低值是固定的,只能是-128,而最高值是可以通過jvm參數設置的。在執行java程序的時候加上-XX:AutoBoxCacheMax=參數即可。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

Long的緩存機制(LongCache)與Integer的類似,還有Character(CharacterCache),Byte(ByteCache)的緩存機制也是類似。不過只有Integer的最大值可以通過jvm參數設置,其他的都固定的。其中,Byte,Short,Long 的範圍: -128 到 127;Character, 範圍是 0 到 127。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章