CodeGym /Blog Java /Aleatoriu /Clasele Wrapper în Java
John Squirrels
Nivel
San Francisco

Clasele Wrapper în Java

Publicat în grup
Bună! Sunteți deja bine familiarizat cu tipurile primitive și ați lucrat destul de mult cu ele. În programare (și în special Java), primitivele au multe avantaje: folosesc puțină memorie (și astfel fac programul mai eficient) și au o gamă de valori clar delimitată. Cu toate acestea, în timp ce învățăm Java, deja am repetat adesea mantra „totul în Java este un obiect”. Dar primitivii contrazic direct aceste cuvinte. Nu sunt obiecte. Deci, principiul nostru „totul este un obiect” este fals? De fapt, nu este. În Java, fiecare tip primitiv are un frate geamăn, o clasă wrapper.

Ce este o clasă Wrapper?

Un wrapper este o clasă specială care stochează o primitivă în interior. Dar pentru că este o clasă, puteți crea instanțe ale acesteia. Ele stochează valorile primitive în interior, dar sunt încă obiecte reale. Numele claselor Wrapper sunt foarte asemănătoare cu (sau exact la fel cu) numele primitivelor lor corespunzătoare. Deci, sunt ușor de reținut.
Clase Wrapper pentru tipuri de date primitive
Tipuri de date primitive Clasele Wrapper
int Întreg
mic de statura Mic de statura
lung Lung
octet octet
pluti Pluti
dubla Dubla
char Caracter
boolean boolean
Obiectele Wrapper sunt create în același mod ca orice alt obiect:

public static void main(String[] args) {

   Integer i = new Integer(682);
  
   Double d = new Double(2.33);
  
   Boolean b = new Boolean(false);
}
Clasele Wrapper ne permit să atenuăm deficiențele tipurilor primitive. Cel mai evident este că primitivii nu au metode. De exemplu, nu au o metodă toString() , deci nu puteți, de exemplu, converti un int într-un String . Dar clasa Integer wrapper face acest lucru ușor.

public static void main(String[] args) {

   Integer i = new Integer(432);
  
   String s = i.toString();
}
Cu toate acestea, conversia în cealaltă direcție poate fi mai dificilă. Să presupunem că avem un String , despre care știm sigur că conține un număr. Indiferent, nu există o modalitate nativă de a folosi un int primitiv pentru a extrage numărul din șir și a-l converti într-un număr. Dar, putem cu clasele de wrapper.

public static void main(String[] args) {

   String s = "1166628";

   Integer i = Integer.parseInt(s);

   System.out.println(i);
}
Ieșire:
1166628
Am extras cu succes un număr din șir și l-am atribuit variabilei de referință Integer i . Apropo, în ceea ce privește referințele. Știți deja că argumentele sunt transmise metodelor în moduri diferite: primitive după valoare și obiecte prin referință. Puteți folosi aceste cunoștințe atunci când vă creați propriile metode: de exemplu, dacă metoda dvs. folosește numere fracționale, dar aveți nevoie de logică pentru a trece prin referință, puteți transmite metodei argumente Double / Float în loc de double / float . Pe lângă metodele claselor wrapper, câmpurile lor statice pot fi, de asemenea, foarte convenabile. De exemplu, imaginați-vă că aveți următoarea sarcină: afișați maximul posibilint , urmată de valoarea minimă posibilă. Această problemă pare destul de simplă. Dar fără Google, este puțin probabil să o faci. Dar ambalajele vă permit să vă ocupați cu ușurință de astfel de „sarcini banale”:

public class Main {
   public static void main(String[] args) {

       System.out.println(Integer.MAX_VALUE);
       System.out.println(Integer.MIN_VALUE);
   }
}
Aceste câmpuri vă împiedică să vă distrași de la îndeplinirea unor sarcini mai serioase. Ca să nu mai vorbim de faptul că introducerea 2147483647 (care se întâmplă să fie valoarea lui MAX_VALUE) nu este un lucru minor! :) Mai mult, într-o lecție anterioară, am subliniat că obiectele de înveliș sunt imuabile.

public static void main(String[] args) {

   Integer a = new Integer(0);
   Integer b = new Integer(0);

   b = a;
   a = 1;
   System.out.println(b);
}
Ieșire:
0
Starea obiectului indicat inițial de a nu s-a schimbat (pentru că și valoarea lui b s-ar fi schimbat). Ca și în cazul String s, în loc să schimbe starea obiectului wrapper, un obiect complet nou este creat în memorie. Deci, de ce au decis creatorii Java în cele din urmă să lase tipurile primitive în limbaj? Deoarece totul ar trebui să fie un obiect și avem clase de înveliș care pot exprima tot ceea ce exprimă primitivele, de ce să nu păstrăm doar ambalajele în limbaj și să eliminați primitivele? Răspunsul este simplu: performanță. Tipurile primitive sunt numite primitive deoarece le lipsesc multe dintre caracteristicile „gree” ale obiectelor. Da, obiectele au multe metode convenabile, dar nu întotdeauna ai nevoie de ele. Uneori, tot ce ai nevoie este numărul 33, sau 2,62 sau adevărat / fals . În situațiile în care avantajele obiectelor nu contează și nu sunt necesare pentru ca programul să funcționeze, primitivele sunt mult mai potrivite sarcinii.
Comentarii
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION