1. Integerclasse
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 Integerclasse ha due campi che contengono i valori massimi e minimi possibili del inttipo:
| Campo | Descrizione |
|---|---|
|
Valore massimo possibile del inttipo |
|
Valore minimo possibile del inttipo |
A volte si desidera assegnare il intvalore 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 Integerclasse 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 intin un Integeroggetto |
|
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. Doubleclasse
In generale, la Doubleclasse è simile alla Integerclasse, solo che esegue il wrapping di un file doublepiuttosto che di un file int. Ha anche campi e metodi che ci interesseranno. Considerane alcuni:
La Doubleclasse ha sei campi interessanti:
| Campo | Descrizione |
|---|---|
|
Infinito negativo |
|
Infinito positivo |
|
Esponente minimo possibile (2 x ) |
|
Esponente massimo possibile (2 x ) |
|
Valore minimo possibile del doubletipo |
|
Valore massimo possibile del doubletipo |
Infinito
Se dividi -1.0per 0.0, ottieni infinito negativo. Se dividi 1.0per 0.0, ottieni infinito positivo. Non solo puoi dividere a doubleper 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à.10x2x1
MIN_EXPONENT == -1024, che significa , che è approssimativamente uguale a2-102410-308
E, naturalmente, la Doubleclasse 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 doublein un Doubleoggetto |
|
Restituisce il numero ottenuto dalla stringa passata |
È interessante notare che esiste un isInfinite()metodo che restituisce truese 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. Characterclasse
La Characterclasse è 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. Booleanclasse
Il Booleantipo è praticamente lo stesso del booleantipo. Le differenze sono minime.
Di seguito mostriamo una versione semplificata della Booleanclasse:
| 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 . BooleantrueTRUEfalseFALSE |
Il Booleantipo 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 booleantipo:
| Codice | Nota |
|---|---|
|
La Booleanclasse è 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 equalse == Anche questo funzionerà. |
L'autoboxing funziona alla grande qui. Ciò significa che puoi utilizzare questo tipo allo stesso modo del booleantipo: non ci sono insidie a cui prestare attenzione.
| Come si scrive | Come funziona |
|---|---|
|
|
E qui un confronto tra i booleantipi 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 Booleanoggetto 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 Booleaninside 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 inte an Integer, Integerviene convertito in an int:
| Come si scrive | Come funziona |
|---|---|
|
|
Se confronti due Integeroggetti tra loro, non vengono convertiti in ints:
| Codice | Uscita console |
|---|---|
|
|
a == ce , ma , perché quando confrontiamo e stiamo confrontando i riferimenti. Che è essenzialmente quello che ci aspetteremmo.b == ca != bab
Sorpresa
Ma se sostituiamo 500con 100, otteniamo un risultato completamente diverso:
| Codice | Uscita console |
|---|---|
|
|
Il problema qui è che un nuovo Integeroggetto non viene sempre effettivamente creato durante l'autoboxing . Gli oggetti vengono memorizzati nella cache per i valori -128tramite 127inclusivo.
La Integerclasse 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' Integeroggetto 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 Booleantipo, its TRUEe FALSEi valori sono entrambi costanti, quindi sono anche essenzialmente memorizzati nella cache.
GO TO FULL VERSION