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: Integer
instead of int
и Character
instead of char
.
Tutti gli oggetti delle classi wrapper sono immutabili ( immutable ).
Il codice semplificato per la Integer
classe è simile al seguente:
Codice | Nota |
---|---|
|
Costruttore di variabili Il metodo restituisce un valore Il metodo statico crea un nuovo Integer oggetto per una int variabile |
2. Conversione di an int
in 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 int
a an Integer
e viceversa sarebbe simile a questo:
Per convertire an int
in an Integer
, devi scrivere questo codice:
Integer name = new Integer(value);
Dove name
è il nome di una Integer
variabile ed value
è il int
valore racchiuso.
Esempi:
Codice | Nota |
---|---|
|
|
|
|
|
E per convertire an Integer
in an int
, devi scrivere questo codice:
int name = variable.intValue();
Dove name
è il nome di una int
variabile ed variable
è un riferimento a un Integer
oggetto.
Esempi:
Codice | Nota |
---|---|
|
|
|
|
|
|
|
|
3. Autoboxing e unboxing
Ma anche semplici operazioni con il Integer
tipo non sono facili da scrivere.
Come abbiamo detto in precedenza, il Integer
tipo è immutabile ( immutabile ). Per creare un Integer
oggetto con un nuovo int
valore, è necessario creare esplicitamente un nuovo Integer
oggetto. Detto questo, è facile ottenere il valore di un oggetto int
memorizzato all'interno di un Integer
oggetto: basta chiamare il intValue()
metodo.
Esempio:
Codice | Descrizione |
---|---|
|
Avvolgi 5 in un Integer oggetto Ottieni il valore dall'oggetto Integer Crea un nuovo Integer oggetto (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 int
in an Integer
si chiama autoboxing (inserimento automatico del valore in una casella) e l'operazione inversa (conversione di an Integer
in an int
) si chiama unboxing .
Il tuo codice | Cosa vede il compilatore |
---|---|
|
|
|
|
|
|
Grazie all'autoboxing e all'unboxing, puoi tranquillamente assegnare an int
a una Integer
variabile e viceversa. È possibile scrivere espressioni di qualsiasi complessità senza fare distinzione tra i tipi int
e 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 Integer
e an Integer
, il confronto si basa sul riferimento e non sui valori.
Codice | Uscita console |
---|---|
|
|
|
|
Le variabili a
e b
non memorizzano int
valori. Memorizzano i riferimenti agli oggetti. Ciò significa che è importante ricordare come confrontarli correttamente:
Sbagliato | Giusto |
---|---|
|
|
GO TO FULL VERSION