Wrapper class là bản "đóng gói object" của primitive: int→Integer, double→Double, boolean→Boolean... Cần chúng vì Collections/Generics chỉ nhận object (List<Integer>, không có List<int>).
- Autoboxing: compiler tự chèn
Integer.valueOf(x)khi gán primitive vào chỗ cần object. - Unboxing: tự chèn
i.intValue()ở chiều ngược lại.
java
List<Integer> xs = new ArrayList<>();
xs.add(5); // autobox: 5 → Integer.valueOf(5)
int first = xs.get(0); // unbox: Integer → intCạm bẫy:
- NPE khi unbox null: Integer n = null; int x = n; → NullPointerException.
- == trên Integer: cache -128..127, nên Integer a=100,b=100; a==b là true, nhưng 128 thì false. Luôn dùng .equals().
- Hiệu năng: autobox trong vòng lặp nóng đẻ object rác — dùng primitive khi tính toán nặng.