自動拆箱裝箱
Integer ii = 100;
ii += 200;
System.out.println("ii:"+ii);
等價于
Integer ii = Integer.valueof(100);//自動裝箱
ii = Integer.valueOf(ii.intValue() + 200);//自動拆箱再自動裝箱
System.out.println(new StringBuilder("ii:").append(ii).toString())
Integer的資料直接指派
首先要明确一點的是 Integer 類裡是重寫了equals() 方法,是以 == 比較的位址值,equals() 比較的是内容
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); //false
System.out.println(i1.equals(i2)); //true
Integer i3 = new Integer(128);
Integer i4 = new Integer(128);
System.out.println(i3 == i4); //false
System.out.println(i3.equals(i4)); //true
Integer i5 = 128;
Integer i6 = 128;
System.out.println(i5 == i6); //false
System.out.println(i5.equals(i6)); //true
Integer i7 = 128;
Integer i8 = 128;
System.out.println(i7 == i8); //true
System.out.println(i7.equals(i8)); //true
以上我們了解自動裝箱操作,直接指派其實就是:
Integer ii = Integer.valueof(127)
再看 valueOf() 方法的源碼
其中low -128
high 127
public static Integer valueOf(int i) {
assert IntegerCache.heigh >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.heigh)
return IntegerCache.cache[i+(-InteferCache.low)];
return new Integer(i);
}
通過源碼就發現,針對 i 在-128到127之間做了一個資料緩沖區,如果資料在 -128 到 127 之間,會直接從緩沖池裡擷取資料,反之,建立新的空間。