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
Integer.MAX_VALUE
Valoarea maximă posibilă a inttipului
Integer.MIN_VALUE
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
int min = Integer.MIN_VALUE;
min == 0x80000000

Clasa Integerare și câteva metode interesante. Aici sunt ei:

Metode Descriere
String Integer.toHexString(int)
Returnează un șir care este reprezentarea hexazecimală a numărului
String Integer.toBinaryString(int)
Returnează un șir care este reprezentarea binară a numărului
String Integer.toOctalString(int)
Returnează un șir care este reprezentarea octală a numărului
Integer Integer.valueOf(int i)
Înfășoară cele transmise intîntr-un Integerobiect
Integer Integer.parseInt(String)
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
double Double.NEGATIVE_INFINITY
Infinitul negativ
double Double.POSITIVE_INFINITY
Infinitul pozitiv
int Double.MIN_EXPONENT
Exponent minim posibil (2 x )
int Double.MAX_EXPONENT
Exponent maxim posibil (2 x )
double Double.MIN_VALUE
Valoarea minimă posibilă a doubletipului
double Double.MAX_VALUE
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
String Double.toHexString(double)
Returnează un șir care este reprezentarea hexazecimală a numărului
boolean Double.isInfinite(double)
Verifică dacă numărul trecut este infinit.
boolean Double.isNaN(double)
Verifică dacă numărul trecut esteNaN
Double Double.valueOf(double)
Înfășoară cele transmise doubleîntr-un Doubleobiect
Double Double.parseDouble(String)
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
Character.isAlphabetic(int)
Verifică dacă un caracter este un caracter alfabetic
Character.isLetter(char)
Verifică dacă caracterul este o literă
Character.isDigit(char)
Verifică dacă caracterul este o cifră
Character.isSpaceChar(char)
Verifică dacă caracterul este un spațiu, o întrerupere de linie sau o întrerupere de pagină (coduri: 12, 13, 14)
Character.isWhitespace(char)
Verifică dacă caracterul este spațiu alb: un spațiu, tab etc.
Character.isLowerCase(char)
Verifică dacă caracterul este scris cu minuscule
Character.isUpperCase(char)
Verifică dacă caracterul este cu majuscule
Character.toLowerCase(char)
Convertește caracterul în minuscule
Character.toUpperCase(char)
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
class Boolean
{
   public static final Boolean TRUE = new Boolean(true);
   public static final Boolean FALSE = new Boolean(false);

   private final boolean value;

   public Boolean(boolean value)
   {
      this.value = value;
   }

   public boolean booleanValue()
   {
      return value;
   }

   public static Boolean valueOf(boolean value)
   {
      return (value ? TRUE : FALSE);
   }
}


Constante: TRUEè Constructor de clasă FALSE


de variabile Metoda returnează valoarea variabilei interne Această metodă statică convertește în și în .

Boolean








trueTRUEfalseFALSE

Tipul Booleanare două constante (două câmpuri):

Constantele clasei Omologul pentru tipul boolean Descriere
Boolean.TRUE
true
Adevărat
Boolean.FALSE
false
fals

Puteți lucra cu ele în același mod în care lucrați cu booleantipul:

Cod Notă
if (Boolean.TRUE)
{
}
Clasa Booleaneste singura clasă care poate fi scrisă într-o condiție
Boolean a = Boolean.TRUE;
boolean b = Boolean.TRUE;
boolean c = true;
Toate cele trei variabile sunt egale cu true/TRUE
Boolean a = Boolean.TRUE;
Boolean b = Boolean.TRUE;
if (a == b)
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
Boolean a = true;
Boolean b = true;
Boolean c = false;
boolean d = a;
Boolean a = Boolean.valueOf(true);
Boolean b = Boolean.valueOf(true);
Boolean c = Boolean.valueOf(false);
boolean d = a.booleanValue();

Ș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ă
Boolean less = (2 < 3);
if (less)
{
   ...
}
Aceasta se va compila și va funcționa

Aceasta se va compila, dar nu va funcționa!

Cod Notă
Boolean less = null;
if (less)
{
   ...
}

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
int a = 5;
Integer b = 5;
if (a == b)
{
   ...
}
int a = 5;
Integer b = Integer.valueOf(5);
if (a == b.intValue())
{
   ...
}

Dacă comparați două Integerobiecte între ele, acestea nu sunt convertite în ints:

Cod Ieșire de consolă
Integer a = 500;
Integer b = 500;
int c = 500;

System.out.println(a == b); // Compared by reference
System.out.println(a == c);
System.out.println(b == c);




false
true
true

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ă
Integer a = 100;
Integer b = 100;
int c = 100;

System.out.println(a == b); // Compared by reference
System.out.println(a == c);
System.out.println(b == c);




true
true
true

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.