文章目錄
- 常見面試題:
- 總結
Integer緩沖區是Java預先創建的一個固定范圍的Integer對象緩存池(默認-128到127),用于自動復用頻繁使用的整數值,減少內存開銷和對象創建。當通過自動裝箱或Integer.valueOf()生成該范圍內的整數時,直接返回緩存對象而非新建實例。
- 當包裝類和基本數據類型比較的時候也會有自動拆箱的操作。 Integer => int。
常見面試題:
分析下面代碼的輸出
Integer i1 = new Integer(127);Integer i2 = new Integer(127);System.out.println(i1 == i2);//false new都是開辟新的內存空間Integer i3 = 127;Integer i4 = 127;System.out.println(i3 == i4);// true/*在自動裝箱的情況下,會在Integer常量池中緩存 [-128,127]之間的Integer常量對象,所以 i3 和 i4都是從緩存中取的,直接從堆內存中返回數據不再new新的對象,所以兩個對象的內存地址相同*/Integer i5 = 128;Integer i6 = 128;System.out.println(i5 == i6);// false/*不在常量池的范圍內,包裝類自動裝箱的底層原理還是new對象,所以還是在內存中開辟了兩個新的地址所以是false*/// Integer.valueOf();方法也適用于上面的理論System.out.println("~~~~~~~~~~~~~~~");Integer i7 = Integer.valueOf(3);Integer i8 = Integer.valueOf(3);System.out.println(i7 == i8);// tureInteger i9 = Integer.valueOf(128);Integer i10 = Integer.valueOf(128);System.out.println(i9 == i10);// ture//當包裝類和基本數據類型比較的時候也會有自動拆箱的操作。 Integer => int//比 較值。System.out.println("-----------------------");int a = 127;Integer b = 127;System.out.println(a == b);// tureint a1 = 128;Integer b1 = 128;System.out.println(a1 == b2);// ture}