Autoboxing (immutabili) - 1

"Ciao, Amico!"

"Oggi parlerò di autoboxing . AutoBoxing significa mettere automaticamente qualcosa in una scatola."

"Ricorderai che Java ha tipi che ereditano la classe Object, così come tipi primitivi. Ma si scopre che cose convenienti come raccolte e generici funzionano solo con tipi che ereditano Object."

"Quindi è stata presa la decisione di creare una controparte non primitiva di ogni tipo primitivo".

Tipo primitivo Controparte non primitiva
byte Byte
corto Corto
int Numero intero
lungo Lungo
galleggiante Galleggiante
Doppio Doppio
booleano Booleano
char Carattere
vuoto Vuoto

"Ma è super scomodo convertire tra questi tipi tutto il tempo:"

int x = 3;
Integer y = new Integer(x + 1);
int z = y.intValue();

"Soprattutto quando si lavora direttamente con le raccolte:"

Esempio
int[] numbers = new int[10];
ArrayList list = new ArrayList();
for (int i = 0; i < numbers.length; i++)
{
 list.add( new Integer(i));
}

"Ecco perché i creatori di Java hanno inventato l'"autoboxing" dei tipi primitivi e l'"unboxing" delle loro controparti non primitive."

"Ecco come funziona:

Quello che vedi Cosa succede davvero
int x = 3;
Integer y = x + 1;
int x = 3;
Integer y = Integer.valueOf(x + 1);
int z = y;
int z = y.intValue();
Boolean b = Boolean.FALSE;
boolean a = b;
Boolean b = Boolean.FALSE;
boolean a = b.booleanValue();
Integer x = null;
int y = x;
Integer x = null; int y = x.intValue(); //Throws an exception

"È tutto semplice. Puoi assegnare i tipi int e Integer tra loro e il compilatore si occupa di tutto il resto."

"È molto conveniente."

"Sì. Ma ci sono sfumature di cui parlerò più tardi."