自動裝箱/拆箱讓基本型別與包裝類別隱式轉換,消除手動 `new Integer(i)` / `i.intValue()` 的樣板碼,但引入效能與語意陷阱。
| 程式碼 | 實際編譯後 |
|---|---|
| List | list.add(Integer.valueOf(1)); |
| Integer obj = 1; int i = obj + 2; | Integer obj = Integer.valueOf(1); int i = obj.intValue() + 2; |
| Integer a = 100; Integer b = 100; a == b | 引用比較,-128~127 快取範圍內為 true |
`Integer.valueOf(int)` 對 -128 到 127 回傳共用快取實例,超出範圍新建物件。`Long`/`Short`/`Byte`/`Character` 同理。`Float`/`Double` 不快取。
void m(Integer x) { ... }
void m(int x) { ... }
m(1); // 呼叫 m(int)
m(new Integer(1)); // 呼叫 m(Integer)
m(null); // 編譯錯誤:模稜兩可