1. Integer
clasa
Integer
este 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 Integer
are două câmpuri care conțin valorile maxime și minime posibile ale int
tipului:
Camp | Descriere |
---|---|
|
Valoarea maximă posibilă a int tipului |
|
Valoarea minimă posibilă a int tipului |
Uneori doriți să atribuiți cea mai mică sau mai mare int
valoare 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 Integer
are ș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 Integer obiect |
|
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. Double
clasa
În general, Double
clasa este similară cu Integer
clasa, doar că include un double
mai degrabă decât un int
. Are și domenii și metode care ne vor interesa. Luați în considerare câteva dintre ele:
Clasa Double
are șase domenii interesante:
Camp | Descriere |
---|---|
|
Infinitul negativ |
|
Infinitul pozitiv |
|
Exponent minim posibil (2 x ) |
|
Exponent maxim posibil (2 x ) |
|
Valoarea minimă posibilă a double tipului |
|
Valoarea maximă posibilă a double tipului |
Infinit
Dacă împărțiți -1.0
cu 0.0
, obțineți infinit negativ. Dacă împărțiți 1.0
cu 0.0
, obțineți infinit pozitiv. Nu numai că puteți împărți a double
la 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.10x
2x
1
MIN_EXPONENT == -1024
, ceea ce înseamnă , care este aproximativ egal cu2-1024
10-308
Și, desigur, Double
clasa 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 Double obiect |
|
Returnează numărul obținut din șirul transmis |
Interesant este că există o isInfinite()
metodă care revine true
dacă 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. Character
clasa
Clasa Character
este 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. Boolean
clasa
Tipul Boolean
este practic același cu boolean
tipul. Diferentele sunt minime.
Mai jos arătăm o versiune simplificată a Boolean
clasei:
Cod | Descriere |
---|---|
|
Constante: TRUE è Constructor de clasă FALSE de variabile Metoda returnează valoarea variabilei interne Această metodă statică convertește în și în . Boolean true TRUE false FALSE |
Tipul Boolean
are 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 boolean
tipul:
Cod | Notă |
---|---|
|
Clasa Boolean este 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 boolean
tipul - 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 Boolean
obiect 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 Boolean
interiorul 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
, Integer
este convertit într-un int
:
Cum este scris | Cum functioneaza |
---|---|
|
|
Dacă comparați două Integer
obiecte între ele, acestea nu sunt convertite în int
s:
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 == c
a != b
a
b
Surprinde
Dar dacă înlocuim 500
cu 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 -128
prin 127
inclusiv.
Clasa Integer
are 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 Integer
obiectul 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 Boolean
tip, valorile sale TRUE
și FALSE
valorile sunt ambele constante, deci sunt, de asemenea, în esență stocate în cache.
GO TO FULL VERSION