| 基本類型 | 位數 | 默認值 | 包裝類型 |
|---|---|---|---|
| boolean | — | false | Boolean |
| byte | 8 | 0 | Byte |
| char | 16 | '\u0000' | Character |
| short | 16 | 0 | Short |
| int | 32 | 0 | Integer |
| long | 64 | 0L | Long |
| float | 32 | 0.0f | Float |
| double | 64 | 0.0d | Double |
| void | — | — | Void |
核心差異:基本類型無方法、非對象;包裝類型可調用 toString()、equals() 等,可泛型化、存入集合。
Integer.valueOf(int)Integer.intValue()Integer i = 10; // 裝箱:Integer.valueOf(10) int n = i; // 拆箱:i.intValue() System.out.println(i++); // 拆箱→運算→裝箱
public static Integer valueOf(int i) {
if (i >= -128 && i <= IntegerCache.high) // 默認 127
return IntegerCache.cache[i + 128];
return new Integer(i);
}
驗證:
Integer a = 100, b = 100; // 緩存區間 System.out.println(a == b); // true(同一對象) Integer c = 200, d = 200; // 非緩存區間 System.out.println(c == d); // false(不同對象)
規則:== 比較引用,equals() 比較值。包裝類型比較值必須用 equals()。
Integer i = null; int n = i; → CrashInteger + int 會拆箱為 int + int,結果為 int-XX:AutoBoxCacheMax=2000 擴大 Integer 緩存上限自動裝箱/拆箱是語法糖,本質是編譯器調用 valueOf/xxxValue。理解緩存範圍、== 與 equals 差異、NPE 風險,能寫出更健壯、高效的代碼。