Autoboxing e unboxing
Regole di conversione automatica
Autoboxing e unboxing è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 4 lezioni in totale.
Conversione automatica
Il termine autoboxing indica la conversione automatica, da parte di Java, di un primitivo nel relativo oggetto wrapper. L'unboxing è l'operazione inversa, che riconverte un wrapper in un primitivo.
Questo avviene in modo trasparente, così può combinare i due mondi senza chiamate di conversione manuali.
Il boxing in azione
L'assegnazione di un int a una variabile Integer attiva l'autoboxing. Il compilatore inserisce automaticamente una chiamata a Integer.valueOf.
public class Main {
public static void main(String[] args) {
int primitive = 42;
Integer boxed = primitive;
System.out.println(boxed);
}
}L'unboxing in azione
L'assegnazione di un Integer a un int attiva l'unboxing. Il compilatore inserisce in modo trasparente una chiamata a intValue.
public class Main {
public static void main(String[] args) {
Integer boxed = 99;
int primitive = boxed;
System.out.println(primitive);
}
}Il boxing nelle collezioni
Il caso più comune in cui si vede l'autoboxing è l'aggiunta di primitivi a una collezione. Si scrive list.add(5) e Java esegue automaticamente il boxing di 5 in un Integer.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> nums = new ArrayList<>();
nums.add(1);
nums.add(2);
int first = nums.get(0);
System.out.println(first);
}
}L'aritmetica esegue l'unboxing
Quando usa operatori matematici su oggetti wrapper, Java li converte prima in primitivi tramite unboxing, esegue il calcolo e può poi eseguire nuovamente il boxing del risultato.
Di seguito, due valori Integer vengono sommati eseguendo l'unboxing di entrambi.
public class Main {
public static void main(String[] args) {
Integer a = 10;
Integer b = 32;
int sum = a + b;
System.out.println(sum);
}
}Combinare primitivi e wrapper
Può combinare liberamente un primitivo e un wrapper in un'espressione. Java esegue l'unboxing del wrapper, così durante il calcolo entrambi i lati sono primitivi.
public class Main {
public static void main(String[] args) {
Integer wrapped = 7;
int raw = 3;
int product = wrapped * raw;
System.out.println(product);
}
}Il boxing nelle chiamate di metodo
L'autoboxing si applica anche agli argomenti dei metodi. Un metodo che si aspetta un Object o un wrapper può ricevere un primitivo, che Java converte in un wrapper durante il passaggio.
public class Main {
static void show(Object value) {
System.out.println("Got: " + value);
}
public static void main(String[] args) {
show(123);
show(true);
}
}Il costo nascosto
L'autoboxing è comodo, ma non è gratuito. Ogni operazione di boxing crea un oggetto e i cicli stretti possono crearne milioni, destinati a una breve durata.
Nei cicli numerici in cui le prestazioni sono fondamentali, lavori direttamente con i primitivi invece che con i wrapper.
public class Main {
public static void main(String[] args) {
long total = 0;
for (int i = 0; i < 5; i++) {
total += i;
}
System.out.println(total);
}
}valueOf rispetto a new
L'autoboxing usa Integer.valueOf, che memorizza nella cache i valori piccoli compresi tra -128 e 127. La chiamata a new Integer(...) crea sempre un nuovo oggetto ed è ormai deprecata.
Preferisca lasciare che sia l'autoboxing a svolgere il proprio compito.
public class Main {
public static void main(String[] args) {
Integer cached = Integer.valueOf(50);
System.out.println(cached);
}
}Ternario e boxing
Esiste una regola sottile: in un'espressione ternaria, se un ramo è un primitivo e l'altro è un wrapper, Java può eseguire l'unboxing di entrambi verso un tipo primitivo comune.
Di solito questo è sicuro, ma tenga presente che può attivare conversioni impreviste.
public class Main {
public static void main(String[] args) {
boolean flag = true;
Integer result = flag ? 1 : 2;
System.out.println(result);
}
}Quando è utile
L'autoboxing esiste per rendere più leggibile il codice che combina primitivi con generics e collezioni. Usato con criterio elimina codice superfluo. Usato senza attenzione nei cicli più eseguiti, penalizza le prestazioni.
Verifica rapida
Verifichi la sua comprensione delle regole dell'autoboxing.
Riepilogo
Ha imparato come funzionano autoboxing e unboxing:
- L'autoboxing converte un primitivo in un wrapper usando
valueOf - L'unboxing riconverte un wrapper in un primitivo usando metodi come
intValue - Avviene nelle assegnazioni, nelle collezioni, nelle operazioni aritmetiche e nelle chiamate di metodo
- È comodo, ma crea oggetti, quindi va evitato nei cicli più eseguiti
Domande Frequenti
La lezione «Autoboxing e unboxing» è gratuita?
Sì — il testo completo di «Autoboxing e unboxing» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 4 lezioni in totale.
Cosa imparerò in «Autoboxing e unboxing»?
Regole di conversione automatica Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Java Academy?
Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Autoboxing e unboxing»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Java Academy?
Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Tipi primitivi e wrapper
- Autoboxing e unboxing
- Parsing e valueOf
- Insidie dell'autoboxing