Autoboxing è la conversione automatica dei tipi primitivi (int, double ecc.) nei corrispondenti oggetti wrapper (Integer, Double ecc.). Unboxing è la conversione inversa dell'oggetto wrapper indietro nel primitivo.
Funziona automaticamente durante l'assegnazione, i parametri dei metodi e nelle collezioni:
List<Integer> numbers = new ArrayList<>(); numbers.add(5); // Esempio di autoboxing: 5 (int) -> Integer(5) int value = numbers.get(0); // Unboxing: Integer(5) -> 5
Rischi:
== (confronto per riferimento) ed equals.Può il seguente codice sollevare un'eccezione? Perché?
Integer x = null; int y = x;
Risposta: Il codice solleva NullPointerException, perché nel tentativo di eseguire int y = x; si verifica un unboxing di null nel primitivo, e null non può essere convertito in int.
Storia
int.Storia
Integer come chiave per la cache, non considerando che i valori da -128 a 127 vengono memorizzati in cache, mentre gli altri no. A causa di ciò, == ha improvvisamente iniziato a restituire risultati errati, causando rimozione errata dei dati dalla cache.Storia
L'API REST riceveva valori nullable. Un semplice unboxing dell'Integer in arrivo a volte portava a un crash a causa del null inaspettato invece di un numero dal client.