Java 同時擁有基本型別與引用型別兩套系統,造成集合無法直接存放基本型別、API 重複等問題。J2SE 5.0 透過自動裝箱/拆箱在編譯器層面橋接兩套系統。
// JDK 1.4 風格
List list = new ArrayList();
for (int i=0; i<10; i++) list.add(new Integer(i)); // 手動裝箱
for (Iterator it = list.iterator(); it.hasNext(); ) {
Integer obj = (Integer) it.next();
System.out.println(obj.intValue() + 1); // 手動拆箱
}List list = new ArrayList<>();
for (int i=0; i<10; i++) list.add(i); // 自動裝箱
for (int val : list) System.out.println(val + 1); // 自動拆箱 + for-each "Boxing/Unboxing" 命名源自 C#,Java 5 正式採用。早期無統一術語,僅稱「包裝/解包裝」。