1. Elenco dei tipi di wrapper
Sai che Java ha 8 tipi primitivi, che sono tipi che non sono classi. Da un lato, questo è un bene: sono semplici e occupano poco spazio. D'altra parte, a volte le lezioni sono proprio ciò di cui abbiamo bisogno. Scoprirai esattamente perché è nella prossima lezione.
Quindi cosa si può fare?
A partire dalla quinta versione di Java, ogni tipo primitivo ha ottenuto una classe gemella. Ciascuna di queste classi memorizza un singolo campo con un valore di un tipo specifico. Queste classi sono chiamate tipi wrapper perché racchiudono i valori primitivi nelle classi.
Ecco un elenco di questi tipi. Conosci qualche?
| Tipo primitivo | Classe wrapper |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
I nomi dei tipi primitivi iniziano con una lettera minuscola, ma i nomi delle classi wrapper iniziano con una lettera maiuscola. Alcuni dei nomi delle classi sono anche un po' più lunghi: Integerinvece di inte Characterinvece di char.
Tutti gli oggetti delle classi wrapper sono immutabili ( immutabili ).
Il codice semplificato per la Integerclasse è simile al seguente:
| Codice | Nota |
|---|---|
|
Costruttore di variabili Il metodo restituisce un valore Il metodo statico crea un nuovo Integeroggetto per una intvariabile |
2. Conversione di an intin anInteger
I tipi wrapper sono considerati controparti dei loro fratelli primitivi: puoi creare facilmente un oggetto wrapper che corrisponde a un tipo primitivo.
Usiamo il tipo int come esempio per analizzare come i tipi primitivi interagiscono con i tipi wrapper corrispondenti. Il codice per la conversione da an inta an Integere viceversa sarebbe simile a questo:
Per convertire an intin an Integer, devi scrivere questo codice:
Integer name = new Integer(value);
Dove nameè il nome di una Integervariabile ed valueè il intvalore racchiuso.
Esempi:
| Codice | Nota |
|---|---|
|
|
|
|
|
E per convertire an Integerin an int, devi scrivere questo codice:
int name = variable.intValue();
Dove nameè il nome di una intvariabile ed variableè un riferimento a un Integeroggetto.
Esempi:
| Codice | Nota |
|---|---|
|
|
|
|
|
|
|
|
3. Autoboxing e unboxing
Ma anche semplici operazioni con il Integertipo non sono facili da scrivere.
Come abbiamo detto in precedenza, il Integertipo è immutabile ( immutabile ). Per creare un Integeroggetto con un nuovo intvalore, è necessario creare esplicitamente un nuovo Integeroggetto. Detto questo, è facile ottenere il valore di un oggetto intmemorizzato all'interno di un Integeroggetto: basta chiamare il intValue()metodo.
Esempio:
| Codice | Descrizione |
|---|---|
|
Avvolgi 5in un Integeroggetto Ottieni il valore dall'oggetto IntegerCrea un nuovo Integeroggetto (uguale a 10) |
Questo è un codice piuttosto ingombrante, non credi?
I creatori di Java la pensavano così, quindi hanno insegnato al compilatore come eseguire queste operazioni automaticamente. La conversione automatica di an intin an Integersi chiama autoboxing (inserimento automatico del valore in una casella) e l'operazione inversa (conversione di an Integerin an int) si chiama unboxing .
| Il tuo codice | Cosa vede il compilatore |
|---|---|
|
|
|
|
|
|
Grazie all'autoboxing e all'unboxing, puoi tranquillamente assegnare an inta una Integervariabile e viceversa. È possibile scrivere espressioni di qualsiasi complessità senza fare distinzione tra i tipi inte Integer.
Esempi:
| Codice | Cosa genererà il compilatore |
|---|---|
|
|
|
|
4. Confronto delle variabili wrapper
Autoboxing e unboxing sono processi semplici e trasparenti. Usiamo new Integer()le istruzioni secondo necessità e chiamiamo il intValue()metodo secondo necessità.
Tutto funziona bene e facilmente per te, il programmatore. Tieni presente che se confronti an Integere an Integer, il confronto si basa sul riferimento e non sui valori.
| Codice | Uscita console |
|---|---|
|
|
|
|
Le variabili ae bnon memorizzano intvalori. Memorizzano i riferimenti agli oggetti. Ciò significa che è importante ricordare come confrontarli correttamente:
| Sbagliato | Giusto |
|---|---|
|
|
GO TO FULL VERSION