1. Integer
classe
Integer
è anche buono in quanto è una classe, il che significa che può avere campi e metodi. E, naturalmente, li ha. Molti di loro - dozzine di loro. Qui considereremo quelli più basilari.
La Integer
classe ha due campi che contengono i valori massimi e minimi possibili del int
tipo:
Campo | Descrizione |
---|---|
|
Valore massimo possibile del int tipo |
|
Valore minimo possibile del int tipo |
A volte si desidera assegnare il int
valore più piccolo o più grande possibile a una variabile. Per evitare di ingombrare il tuo codice con costanti incomprensibili, puoi scriverlo molto chiaramente come segue:
Codice | Descrizione |
---|---|
|
|
La Integer
classe ha anche alcuni metodi interessanti. Eccoli:
Metodi | Descrizione |
---|---|
|
Restituisce una stringa che è la rappresentazione esadecimale del numero |
|
Restituisce una stringa che è la rappresentazione binaria del numero |
|
Restituisce una stringa che è la rappresentazione ottale del numero |
|
Avvolge il passato int in un Integer oggetto |
|
Restituisce il numero ottenuto dalla stringa passata |
Hai già incontrato il Integer.parseInt()
metodo statico. Ricordiamo come funziona:
int name = Integer.parseInt(string);
Se una stringa contenente un numero (solo cifre) viene passata al parseInt()
metodo, analizzerà la stringa e restituirà il numero che contiene.
Anche il resto dei metodi è utile. Ad esempio, alcuni di essi possono convertire un numero passato in una stringa contenente la rappresentazione binaria, ottale o esadecimale del numero.
2. Double
classe
In generale, la Double
classe è simile alla Integer
classe, solo che esegue il wrapping di un file double
piuttosto che di un file int
. Ha anche campi e metodi che ci interesseranno. Considerane alcuni:
La Double
classe ha sei campi interessanti:
Campo | Descrizione |
---|---|
|
Infinito negativo |
|
Infinito positivo |
|
Esponente minimo possibile (2 x ) |
|
Esponente massimo possibile (2 x ) |
|
Valore minimo possibile del double tipo |
|
Valore massimo possibile del double tipo |
Infinito
Se dividi -1.0
per 0.0
, ottieni infinito negativo. Se dividi 1.0
per 0.0
, ottieni infinito positivo. Non solo puoi dividere a double
per zero, ma puoi anche usarlo per memorizzare il risultato di queste operazioni.
Esponente di adouble
Capire l'esponente è facile. Internamente, un doppio è costituito da una mantissa e un esponente. Ma qui il valore dell'esponente non è , ma . Pertanto, se l'esponente aumenta di , il valore totale del numero raddoppierà.10x
2x
1
MIN_EXPONENT == -1024
, che significa , che è approssimativamente uguale a2-1024
10-308
E, naturalmente, la Double
classe ha metodi interessanti:
Metodi | Descrizione |
---|---|
|
Restituisce una stringa che è la rappresentazione esadecimale del numero |
|
Controlla se il numero passato è infinito. |
|
Controlla se il numero passato èNaN |
|
Avvolge il passato double in un Double oggetto |
|
Restituisce il numero ottenuto dalla stringa passata |
È interessante notare che esiste un isInfinite()
metodo che restituisce true
se il numero passato è infinito positivo o negativo.
Il isNaN()
metodo è simile: controlla se il numero passato è NaN
( Not-a-Number , una costante speciale che indica un valore non definito).
3. Character
classe
La Character
classe è interessante principalmente per il suo gran numero di metodi di utilità statici che consentono di verificare se i caratteri appartengono a varie categorie.
Esempi
Metodi | Descrizione |
---|---|
|
Controlla se un carattere è un carattere alfabetico |
|
Controlla se il carattere è una lettera |
|
Controlla se il carattere è una cifra |
|
Controlla se il carattere è uno spazio, un'interruzione di riga o un'interruzione di pagina (codici: 12, 13, 14) |
|
Controlla se il carattere è uno spazio bianco: uno spazio, una tabulazione, ecc. |
|
Controlla se il carattere è minuscolo |
|
Controlla se il carattere è maiuscolo |
|
Converte il carattere in minuscolo |
|
Converte il carattere in maiuscolo |
Una caratteristica di questi metodi è che funzionano con tutti gli alfabeti conosciuti: i numeri arabi sono classificati come cifre, ecc.
4. Boolean
classe
Il Boolean
tipo è praticamente lo stesso del boolean
tipo. Le differenze sono minime.
Di seguito mostriamo una versione semplificata della Boolean
classe:
Codice | Descrizione |
---|---|
|
Costanti: TRUE è Costruttore di classi FALSE di variabili Il metodo restituisce il valore della variabile interna Questo metodo statico converte in e in . Boolean true TRUE false FALSE |
Il Boolean
tipo ha due costanti (due campi):
Costanti della classe | Controparte per il tipo booleano | Descrizione |
---|---|---|
|
|
VERO |
|
|
falso |
Puoi lavorare con loro nello stesso modo in cui lavori con il boolean
tipo:
Codice | Nota |
---|---|
|
La Boolean classe è l'unica classe che può essere scritta all'interno di una condizione |
|
Tutte e tre le variabili sono uguali a true /TRUE |
|
Le costanti possono essere confrontate usando entrambi equals e == Anche questo funzionerà. |
L'autoboxing funziona alla grande qui. Ciò significa che puoi utilizzare questo tipo allo stesso modo del boolean
tipo: non ci sono insidie a cui prestare attenzione.
Come si scrive | Come funziona |
---|---|
|
|
E qui un confronto tra i boolean
tipi e Boolean
:
boolean a = true;
Boolean b = true; // b will be equal to Boolean.TRUE
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // true (compared by reference, but they point to the same object)
Se hai davvero bisogno di un Boolean
oggetto indipendente, devi crearlo in modo esplicito:
boolean a = true;
Boolean b = new Boolean(true); // New Boolean object
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // false (compared by reference, and they point to different objects)
Un altro esempio, in cui useremo a Boolean
inside of an if
:
Codice | Nota |
---|---|
|
Questo verrà compilato e funzionerà |
Questo verrà compilato, ma non funzionerà!
Codice | Nota |
---|---|
|
Errore . Questa riga genererà un'eccezione |
5. Valori di memorizzazione nella cache durante l'autoboxing
Ci sono alcune insidie correlate ai tipi di wrapper interi.
Come già sai, se confrontiamo an int
e an Integer
, Integer
viene convertito in an int
:
Come si scrive | Come funziona |
---|---|
|
|
Se confronti due Integer
oggetti tra loro, non vengono convertiti in int
s:
Codice | Uscita console |
---|---|
|
|
a == c
e , ma , perché quando confrontiamo e stiamo confrontando i riferimenti. Che è essenzialmente quello che ci aspetteremmo.b == c
a != b
a
b
Sorpresa
Ma se sostituiamo 500
con 100
, otteniamo un risultato completamente diverso:
Codice | Uscita console |
---|---|
|
|
Il problema qui è che un nuovo Integer
oggetto non viene sempre effettivamente creato durante l'autoboxing . Gli oggetti vengono memorizzati nella cache per i valori -128
tramite 127
inclusivo.
La Integer
classe ha un array nascosto che memorizza gli oggetti: Integer(-128)
, Integer(-127)
, ... Integer(126)
,Integer(127)
Se scrivi Integer x = 128
, il processo di autoboxing crea un nuovo oggetto, ma se scrivi Integer x = 127
, il processo di autoboxing recupera l'oggetto esistente dalla cache (dall'array).
Se non vuoi che l' Integer
oggetto provenga dalla cache, dovrai crearlo esplicitamente scrivendo:Integer x = new Integer(127);
Tutti i tipi di wrapper hanno una tale cache: Integer
, Long
, Byte
, Short
, Boolean
. Per il Boolean
tipo, its TRUE
e FALSE
i valori sono entrambi costanti, quindi sono anche essenzialmente memorizzati nella cache.
GO TO FULL VERSION