Autoboxing e unboxing – Lezione 9 di Java Avanzato

Inglobare in automatico i tipi con l’autoboxing e l’unboxing

A partire dalla versione di Java 1.5 è stata introdotta la possibilità di poter convertire automaticamente (autoboxing) i valori dei tipi base in oggetti e viceversa (unboxing). Questi processi trovano grande utilità con i tipi wrapper, in particolare è possibile scrivere senza avere nessun errore di compilazione istruzioni come Integer n = 7. Quest’istruzione assegna un tipo numerico ad un oggetto dello stesso tipo. Prima di Java 1.5 un’istruzione del genere avrebbe provocato un errore di compilazione. Adesso, con le versioni più recenti con quest’istruzione viene eseguito in automatico l’incapsulamento del valore in un oggetto. Quest’istruzione equivale allo stesso tipo di istruzione fatta con il costruttore dei tipi wrapper, al punto che il compilatore nel bytecode inserirà quest’ultima versione:

  Integer n = new Integer(7);

Questo processo viene detto autoboxing e consente di non dover più convertire esplicitamente i valori dei tipi base in oggetti. Il processo inverso prende il nome di unboxing, ovvero la conversazione in automatico da un oggetto ad un valore. Ad esempio, con la variabile i di tipo Integer avremo l’unboxing:

  int n = i;

L’istruzione precedente verrà tradotta come:

  int n = i.intValue();

Istruzioni complesse con autoboxing e unboxing

Anche per istruzioni più complesse il discorso non cambia, si attiverà in automatico l’autoboxing e l’unboxing:

  Integer j = i + 1;

…che equivale dire al compilatore:

  Integer j = new Integer( i.intValue() + 1 );

Dato che non esistono istruzioni per effettuare operazioni sui tipi wrapper, con l’autoboxing e unboxing abbiamo la possibilità di simularle, ad esempio:

  i++;

Equivale a dire:

  i = new Integer( i.intValue() + 1 );

L’autoboxing interviene solo quando c’è corrispondenza esatta tra tipi base e classi wrapper. In caso contrario l’autoboxing non viene attivato e se è necessaria di una conversione avremo un errore di compilazione. Ad esempio:

  Double d = 1;

Quest’istruzione comporta una conversione implicita da int a double, la corrispondenza tra valore (int) e classe (double) non è esatta, quindi ci sarà un errore di compilazione. L’istruzione corretta da usare è la seguente:

  Double d = 1d; // Tipo double

Altri esempi di istruzioni non valide sono:

  Double d = 1.0f; // Tipo float
  Integer n = (byte) 1; // Tipo byte

Indice Lezione PrecedenteLezione Successiva

Pubblicato in Guide, Java, Programmazione Taggato con: , , , ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*