Autoboxing — to automatyczne przekształcanie typów prymitywnych (int, double itd.) w odpowiadające im obiekty opakowujące (Integer, Double itd.). Unboxing — to odwrotne przekształcenie obiektu opakowującego z powrotem w typ prymitywny.
Działa automatycznie przy przypisywaniu, argumentach metod i w kolekcjach:
List<Integer> numbers = new ArrayList<>(); numbers.add(5); // Przykład autoboxingu: 5 (int) -> Integer(5) int value = numbers.get(0); // Unboxing: Integer(5) -> 5
Ryzyka:
Czy poniższy kod może zgłosić wyjątek? Dlaczego?
Integer x = null; int y = x;
Odpowiedź: Kod zgłasza NullPointerException, ponieważ przy próbie wykonania int y = x; następuje unboxing z null na prymityw, a null nie może być przekształcone na int.
Historia
int.Historia
Integer jako klucza do pamięci podręcznej, nie uwzględniając, że wartości -128...127 są buforowane, a pozostałe — nie. Z tego powodu == nagle zaczęło dawać błędne wyniki, co doprowadziło do nieprawidłowego usuwania danych z pamięci podręcznej.Historia
W REST API przychodziły wartości nullable. Prosty unboxing przychodzącego Integer czasami prowadził do awarii z powodu niespodziewanego null zamiast liczby od klienta.