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");

   }
}


L'output di questo programma sarà:

Hai inserito 123
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

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java