Autoboxing e Unboxing Java
DOMANDA:
Cosa sono l'Autoboxing e l'Unboxing in Java?
RISPOSTA:
Dalla versione 1.5 di Java in poi è stata introdotta una funzionalità davvero comoda che viene chiamata Autoboxing (e l'opposta Unboxing).
Trascurando i termini tecnici l'Autoboxing non è altro che un casting automatico con cui Java trasforma i tipi di dato primitivi nei corrispettivi ad oggetto e viceversa (Unboxing).
Vediamo un rapido esempio:
package autoboxing;
public class TestAutoboxing {
public static void main(String[] args) {
Integer interoObj = 123; // autoboxing
int primitivoInt = new Integer(123); // unboxing
System.out.println("Hai inserito " + interoObj);
System.out.println("Hai inserito " + primitivoInt);
Integer somma = interoObj + primitivoInt + 10; // autoboxing e unboxing
System.out.println("La somma è: " + somma);
// test locazione di memoria
if(interoObj == primitivoInt)
System.out.println("VERO");
else
System.out.println("FALSO");
}
}
public class TestAutoboxing {
public static void main(String[] args) {
Integer interoObj = 123; // autoboxing
int primitivoInt = new Integer(123); // unboxing
System.out.println("Hai inserito " + interoObj);
System.out.println("Hai inserito " + primitivoInt);
Integer somma = interoObj + primitivoInt + 10; // autoboxing e unboxing
System.out.println("La somma è: " + somma);
// test locazione di memoria
if(interoObj == primitivoInt)
System.out.println("VERO");
else
System.out.println("FALSO");
}
}
L'output di questo programma sarà:
Hai inserito 123
Hai inserito 123
VERO
La somma è: 256
Hai inserito 123
VERO
La somma è: 256
Come si nota, inizialmente assegno ad un Integer un int (Boxing) e, nel secondo caso, ad un int un nuovo Integer (Unboxing).
Poi i due interi vengono sommati come se fossero tutti dati dello stesso tipo. Java trasforma i dati primitivi in oggetto e viceversa, trattando tutto come un solo tipo di dato.
Infine, effettuando un confronto brutale, i due oggetti (trasformati in tipi primitivi) interoObj e primitivoInt risultano uguali anche come locazione di memoria (a causa delle ottimizzazioni dei tipi di dati primitivi della JVM). Tale corrispondenza dell'indirizzo di memoria dimostra come i dati siano effettivamente trattati allo stesso modo anche a livello di memorizzazione.
Da notare che è grazie all'Autoboxing che possiamo inserire i tipi primitivi all'interno delle Collection in maniera totalmente trasparente e senza preoccuparci di convertire i dati.
Commenti
Posta un commento