Autoboxing zamienia prymitywy na wrappery (np. `int`→`Integer`), a unboxing odwrotnie. Pułapki: unboxing `null` daje NPE, cache’owanie `Integer` może mylić przy `==`, a dodatkowe alokacje potrafią zaboleć wydajnościowo.
Integer x = null;
// int y = x; // NullPointerException due to unboxing
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true (Integer cache)
Integer c = 1000;
Integer d = 1000;
System.out.println(c == d); // falseAutoboxing/unboxing to generowane przez kompilator konwersje między prymitywami i wrapperami.
Gdzie występuje:
Integer x = null;
int y = x; // NPEInteger a = 127, b = 127; // cache
Integer c = 128, d = 128; // zwykle bez cache
System.out.println(a == b); // true
System.out.println(c == d); // false