Zestawy rozmówBlog

Twoja wymarzona praca? Lets Git IT.
Interaktywna platforma przygotowująca do rozmów technicznych dla nowoczesnych programistów.

XGitHub

Platforma

  • Kategorie

Zasoby

  • Blog
  • O aplikacji
  • FAQ
  • Sugestie

Prawne

  • Polityka prywatności
  • Regulamin

© 2026 LetsGit.IT. Wszelkie prawa zastrzeżone.

LetsGit.IT/Kategorie/Java
Javamedium

Autoboxing/unboxing — co to jest i jakie są pułapki?

Tagi
#autoboxing#wrapper#npe
Wróć do kategoriiPrzejdź do quizu

Odpowiedź

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); // false

Odpowiedź zaawansowana

Głębiej

Autoboxing/unboxing to generowane przez kompilator konwersje między prymitywami i wrapperami.

Gdzie występuje:

  • Generyki: `List<Integer>` nie przechowa `int`.
  • API przyjmujące `Object`.

Typowe pułapki

  • NPE przy unboxingu:
Integer x = null;
int y = x; // NPE
  • `==` na wrapperach porównuje referencje (a cache może ukrywać błąd):
Integer 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
  • Wydajność: boxing w hot-loopach tworzy śmieci i dokłada pracy GC.

Praktyka

  • W krytycznych ścieżkach preferuj prymitywy.
  • Dla wrapperów używaj `.equals()` albo jawnie unboxuj, jeśli to bezpieczne.
  • Gdy trzeba, rozważ rozwiązania prymitywne (primitive streams / kolekcje specjalizowane).