Java關於包裝類Integer和Char類的在自動裝箱時的緩存處理代碼說明


public class TestIntegerCache {
	
	public static void main(String[] args) {
		Integer int1 = -128;
		Integer int2 = -128;
		System.out.println(int1 == int2);//true兩者都在緩存範圍,同一個對象地址
		System.out.println(int1.hashCode());//在編譯時的地址代號爲17
		System.out.println(int2.hashCode());//在編譯時的地址代號爲17
		System.out.println(int1.equals(int2));//true
		
		Integer int3 = 1234;
		Integer int4 = 1234;
		System.out.println(int3 == int4);//false兩者都不在緩存範圍,不是同一個對象地址
		System.out.println(int3.hashCode());//在編譯時的地址代號爲24
		System.out.println(int4.hashCode());//在編譯時的地址代號爲25
		System.out.println(int1.equals(int2));//true,值相等
		
		
	}

}

在這裏插入圖片描述
整型、char類型所對應的包裝類,在自動裝箱時,對於-128~127之間的值會進行緩存處理,目的是提高效率。
1.如果數據在-128~127之間,則在類加載時就已經爲該區間的每個數值創建了對象。
2.並將這256個對象存放到一個名爲cache的數組中。
3.每當自動裝箱過程發生時(或者手動調用valueOf()時),就會判斷數據是否在該區間,
如果在則直接獲取數組中對應的包裝類對象的引用,
如果不在該區間,則會通過new調用包裝類的構造方法來創建對象對象。
注意點:
包裝類在自動裝箱時爲了提高效率,對於-128~127之間的值會進行緩存處理。超過範圍後,對象之間不能再使用==進行數值的比較,而是使用equals方法。

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