包裝類面試題

Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1==i2); //true

Integer i3 = -129;
Integer i4 = -129;
System.out.println(i3==i4); //false

解析:
自動裝箱時,如果數據介於 -128 ~ 127中間 == 比較的結果為true 反之為false
自動裝箱原理:
自動幫我們使用Integer.valueOf()

if(i >= -128 && i <= 127){
	return IntegerCache.cache[i+(-IntegerCache.low)];
}
return new Integer(i);

如果裝箱數據不在 -128 ~ 127中間,會重新創建新對象
IntegerCache是一個數組
只要在範圍內,都是從這個屬組內取出來的
所以地址必定相同

在Integer類中存在一個長度為256的數組
數組中存了256個Integer對象,分別是 -128~0~127

需注意:
== 是比地址
要比內容還是用equals
image.png