Integer i = 10; 等同 Integer.valueOf(10)int n = i; 等同 i.intValue()Integer.valueOf() 內部緩存 [-128, 127] 範圍內的整數物件:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
int i = 10; Integer j = new Integer(10); // 強制新建物件 Integer k = 10; // valueOf(10) → 緩存物件 Integer s = Integer.valueOf(10); // 緩存物件 System.out.println(i == j); // true → 拆箱比較數值 System.out.println(j == k); // false → 記憶體位址不同 System.out.println(k == s); // true → 同一緩存物件 System.out.println(j.equals(i)); // true → equals 比較數值
equals() 比較包裝類型數值,除非確定同一物件引用IntList)-XX:AutoBoxCacheMax=size 擴大緩存上限(JDK 8+)| 類型 | 緩存範圍 |
|---|---|
| Byte | -128 ~ 127 (全範圍) |
| Short | -128 ~ 127 |
| Integer | -128 ~ 127 |
| Long | -128 ~ 127 |
| Character | 0 ~ 127 (ASCII) |
| Boolean | TRUE/FALSE 兩個單例 |
| Float/Double | 無緩存 |