1. Lista tipurilor de ambalaje
Știți că Java are 8 tipuri primitive, care sunt tipuri care nu sunt clase. Pe de o parte, acest lucru este bun - sunt simple și ocupă puțin spațiu. Pe de altă parte, uneori, orele sunt exact ceea ce avem nevoie. Veți afla exact de ce se întâmplă asta în lecția următoare.
Deci ce se poate face?
Începând cu cea de-a cincea versiune de Java, fiecare tip primitiv a câștigat o clasă dublă. Fiecare astfel de clasă stochează un singur câmp cu o valoare de un anumit tip. Aceste clase sunt numite tipuri de wrapper , deoarece încapăsează valorile primitive în clase.
Iată o listă cu aceste tipuri. Stii vreunul?
| Tipul primitiv | Clasa Wrapper |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Numele tipurilor primitive încep cu o literă mică, dar numele claselor de wrapper încep cu o literă mare. Unele dintre numele claselor sunt, de asemenea, puțin mai lungi: Integerîn loc de intși Characterîn loc de char.
Toate obiectele claselor wrapper sunt neschimbabile ( imuabile ).
Codul simplificat pentru Integerclasă arată cam așa:
| Cod | Notă |
|---|---|
|
Constructor de variabile Metoda returnează o valoare Metoda statică creează un nou Integerobiect pentru o intvariabilă |
2. Transformarea unui intîn anInteger
Tipurile de wrapper sunt considerate omologi ale fraților lor primitivi: puteți crea cu ușurință un obiect wrapper care corespunde unui tip primitiv.
Să folosim tipul int ca exemplu pentru a analiza modul în care tipurile primitive interacționează cu tipurile lor de wrapper corespunzătoare. Codul pentru conversia de la an intla an Integerși invers ar arăta astfel:
Pentru a converti un intîntr-un Integer, trebuie să scrieți acest cod:
Integer name = new Integer(value);
Unde nameeste numele unei Integervariabile și valueeste valoarea încapsulată int.
Exemple:
| Cod | Notă |
|---|---|
|
|
|
|
|
Și pentru a converti an Integerîn an int, trebuie să scrieți acest cod:
int name = variable.intValue();
Unde nameeste numele unei intvariabile și variableeste o referință la un Integerobiect.
Exemple:
| Cod | Notă |
|---|---|
|
|
|
|
|
|
|
|
3. Autoboxing și unboxing
Dar nici operațiunile simple cu Integertipul nu sunt ușor de scris.
După cum am spus anterior, Integertipul este neschimbabil ( imuabil ). Pentru a crea un Integerobiect cu o nouă intvaloare, trebuie să creați în mod explicit un nou Integerobiect. Acestea fiind spuse, este ușor să obțineți valoarea unui obiect intstocat în interiorul unui Integerobiect - doar apelați intValue()metoda.
Exemplu:
| Cod | Descriere |
|---|---|
|
Înfășurare 5într-un Integerobiect Obțineți valoarea din Integerobiect Creați un obiect nou Integer(egal cu 10) |
Acesta este un cod destul de greoi, nu crezi?
Creatorii Java au crezut așa, așa că l-au învățat pe compilator cum să facă aceste operațiuni automat. Conversia automată a unui an intîn an Integerse numește autoboxing (introducerea automată a valorii într-o casetă), iar operația inversă (conversia unui an Integerîn an int) se numește unboxing .
| Codul tau | Ce vede compilatorul |
|---|---|
|
|
|
|
|
|
Datorită autoboxing și unboxing, puteți atribui în siguranță into Integervariabilă și invers. Puteți scrie expresii de orice complexitate fără a face o distincție între intși Integertipuri.
Exemple:
| Cod | Ce va genera compilatorul |
|---|---|
|
|
|
|
4. Compararea variabilelor wrapperului
Autoboxing și unboxing sunt procese simple și transparente. Folosim new Integer()instrucțiuni după cum este necesar și numim intValue()metoda după cum este necesar.
Totul funcționează frumos și ușor pentru tine, programatorul. Rețineți că, dacă comparați un Integerși un Integer, atunci comparația se bazează pe referință și nu pe valori.
| Cod | Ieșire de consolă |
|---|---|
|
|
|
|
Variabilele ași bnu stochează intvalori. Ele stochează referințe la obiecte. Aceasta înseamnă că este important să vă amintiți cum să le comparați corect:
| Gresit | Dreapta |
|---|---|
|
|
GO TO FULL VERSION