1. Integerclasa
Integereste bun și prin faptul că este o clasă, ceea ce înseamnă că poate avea câmpuri și metode. Și, desigur, le are. Mulți dintre ei - zeci de ei. Aici le vom lua în considerare pe cele mai de bază.
Clasa Integerare două câmpuri care conțin valorile maxime și minime posibile ale inttipului:
| Camp | Descriere |
|---|---|
|
Valoarea maximă posibilă a inttipului |
|
Valoarea minimă posibilă a inttipului |
Uneori doriți să atribuiți cea mai mică sau mai mare intvaloare posibilă unei variabile. Pentru a evita aglomerarea codului cu constante de neînțeles, puteți scrie acest lucru foarte clar, după cum urmează:
| Cod | Descriere |
|---|---|
|
|
Clasa Integerare și câteva metode interesante. Aici sunt ei:
| Metode | Descriere |
|---|---|
|
Returnează un șir care este reprezentarea hexazecimală a numărului |
|
Returnează un șir care este reprezentarea binară a numărului |
|
Returnează un șir care este reprezentarea octală a numărului |
|
Înfășoară cele transmise intîntr-un Integerobiect |
|
Returnează numărul obținut din șirul transmis |
Ați întâlnit anterior metoda statică Integer.parseInt(). Să ne amintim cum funcționează:
int name = Integer.parseInt(string);
Dacă un șir care conține un număr (doar cifre) este transmis metodei parseInt(), aceasta va analiza șirul și va returna numărul pe care îl conține.
Restul metodelor sunt de asemenea utile. De exemplu, unele dintre ele pot converti un număr transmis într-un șir care conține reprezentarea binară, octală sau hexazecimală a numărului.
2. Doubleclasa
În general, Doubleclasa este similară cu Integerclasa, doar că include un doublemai degrabă decât un int. Are și domenii și metode care ne vor interesa. Luați în considerare câteva dintre ele:
Clasa Doubleare șase domenii interesante:
| Camp | Descriere |
|---|---|
|
Infinitul negativ |
|
Infinitul pozitiv |
|
Exponent minim posibil (2 x ) |
|
Exponent maxim posibil (2 x ) |
|
Valoarea minimă posibilă a doubletipului |
|
Valoarea maximă posibilă a doubletipului |
Infinit
Dacă împărțiți -1.0cu 0.0, obțineți infinit negativ. Dacă împărțiți 1.0cu 0.0, obțineți infinit pozitiv. Nu numai că puteți împărți a doublela zero, dar îl puteți folosi și pentru a stoca rezultatul acestor operații.
Exponent al adouble
Înțelegerea exponentului este ușoară. În interior, un dublu este format dintr-o mantisă și un exponent. Dar aici valoarea exponentului nu este , ci . Astfel, dacă exponentul crește cu , valoarea totală a numărului se va dubla.10x2x1
MIN_EXPONENT == -1024, ceea ce înseamnă , care este aproximativ egal cu2-102410-308
Și, desigur, Doubleclasa are metode interesante:
| Metode | Descriere |
|---|---|
|
Returnează un șir care este reprezentarea hexazecimală a numărului |
|
Verifică dacă numărul trecut este infinit. |
|
Verifică dacă numărul trecut esteNaN |
|
Înfășoară cele transmise doubleîntr-un Doubleobiect |
|
Returnează numărul obținut din șirul transmis |
Interesant este că există o isInfinite()metodă care revine truedacă numărul trecut este infinit pozitiv sau negativ.
Metoda isNaN()este similară — verifică dacă numărul transmis este NaN( Not-a-Number , o constantă specială care indică o valoare nedefinită).
3. Characterclasa
Clasa Charactereste interesantă în primul rând pentru numărul mare de metode utilitare statice care vă permit să verificați dacă caracterele aparțin diferitelor categorii.
Exemple
| Metode | Descriere |
|---|---|
|
Verifică dacă un caracter este un caracter alfabetic |
|
Verifică dacă caracterul este o literă |
|
Verifică dacă caracterul este o cifră |
|
Verifică dacă caracterul este un spațiu, o întrerupere de linie sau o întrerupere de pagină (coduri: 12, 13, 14) |
|
Verifică dacă caracterul este spațiu alb: un spațiu, tab etc. |
|
Verifică dacă caracterul este scris cu minuscule |
|
Verifică dacă caracterul este cu majuscule |
|
Convertește caracterul în minuscule |
|
Convertește caracterul în majuscule |
O caracteristică a acestor metode este că funcționează cu toate alfabetele cunoscute: cifrele arabe sunt clasificate ca cifre etc.
4. Booleanclasa
Tipul Booleaneste practic același cu booleantipul. Diferentele sunt minime.
Mai jos arătăm o versiune simplificată a Booleanclasei:
| Cod | Descriere |
|---|---|
|
Constante: TRUEè Constructor de clasă FALSE de variabile Metoda returnează valoarea variabilei interne Această metodă statică convertește în și în . BooleantrueTRUEfalseFALSE |
Tipul Booleanare două constante (două câmpuri):
| Constantele clasei | Omologul pentru tipul boolean | Descriere |
|---|---|---|
|
|
Adevărat |
|
|
fals |
Puteți lucra cu ele în același mod în care lucrați cu booleantipul:
| Cod | Notă |
|---|---|
|
Clasa Booleaneste singura clasă care poate fi scrisă într-o condiție |
|
Toate cele trei variabile sunt egale cu true/TRUE |
|
Constantele pot fi comparate folosind ambele equalsși == Acest lucru va funcționa, de asemenea. |
Autoboxing-ul funcționează excelent aici. Aceasta înseamnă că puteți utiliza acest tip în același mod ca booleantipul - nu există capcane la care să aveți grijă.
| Cum este scris | Cum functioneaza |
|---|---|
|
|
Și aici o comparație a tipurilor booleanși 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)
Dacă într-adevăr aveți nevoie de un Booleanobiect independent, atunci trebuie să îl creați în mod explicit:
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)
Încă un exemplu, în care vom folosi Booleaninteriorul unui if:
| Cod | Notă |
|---|---|
|
Aceasta se va compila și va funcționa |
Aceasta se va compila, dar nu va funcționa!
| Cod | Notă |
|---|---|
|
Eroare . Această linie va arunca o excepție |
5. Memorarea în cache a valorilor în timpul autoboxingului
Există câteva capcane legate de tipurile de pachete întregi.
După cum știți deja, dacă comparăm an intși an Integer, Integereste convertit într-un int:
| Cum este scris | Cum functioneaza |
|---|---|
|
|
Dacă comparați două Integerobiecte între ele, acestea nu sunt convertite în ints:
| Cod | Ieșire de consolă |
|---|---|
|
|
a == cși , dar , pentru că atunci când comparăm și comparăm referințe. Ceea ce este în esență ceea ce ne-am aștepta.b == ca != bab
Surprinde
Dar dacă înlocuim 500cu 100, atunci obținem un rezultat complet diferit:
| Cod | Ieșire de consolă |
|---|---|
|
|
Problema aici este că un obiect nou nu este întotdeauna creat efectiv în timpul autoboxinguluiInteger . Obiectele sunt stocate în cache pentru valori -128prin 127inclusiv.
Clasa Integerare o matrice ascunsă care stochează obiecte: Integer(-128), Integer(-127), ... Integer(126),Integer(127)
Dacă scrieți Integer x = 128, atunci procesul de autoboxing creează un obiect nou, dar dacă scrieți Integer x = 127, atunci procesul de autoboxing preia obiectul existent din cache (din matrice).
Dacă nu doriți ca Integerobiectul să provină din cache, va trebui să-l creați explicit scriind:Integer x = new Integer(127);
Toate tipurile de wrapper au un astfel de cache: Integer, Long, Byte, Short, Boolean. Pentru Booleantip, valorile sale TRUEși FALSEvalorile sunt ambele constante, deci sunt, de asemenea, în esență stocate în cache.
GO TO FULL VERSION