Avtoupakovka și avtoraspakovka

Privire de ansamblu asupra tipurilor de scoici și valori de ambalare

După cum știți, în limbajul Java folosind tipurile de bază (numite simplu), cum ar fi int sau dublu, pentru stocarea tipuri de date de bază acceptate de limba. Pentru a stoca aceste date, deoarece sunt utilizate tipuri de bază de performanță mai mare, mai degrabă decât obiecte. În acest caz, utilizarea obiectelor adăugarea de costuri inacceptabile, chiar și la cel mai simplu calcul. Astfel, tipurile de bază nu fac parte din ierarhia de obiecte și nu moștenesc Obiectul de clasă.

În ciuda câștigurilor de performanță oferite de tipurile de bază, există situații care necesită depunerea obligatorie a unui obiect. De exemplu, nu puteți trece variabila la metoda de tipul de bază ca parametru de referință. În plus, multe Structura de date standard implementate de Java, operează cu obiecte, și, prin urmare, nu se poate utiliza aceste structuri pentru a stoca tipuri de date de bază. Pentru aceste (și altele) cazuri, Java oferă un tip shell, care sunt clase care încapsulează simplu tipul de obiect de date. Următoarele sunt clase de tipuri de membrane.

Valoarea tipului de bază este încapsulată în învelișul la momentul proiectării obiectului. Valoarea ambalate astfel, este posibil să se întoarcă apelând una dintre metodele definite în coajă. De exemplu, toate tipurile numerice coajă oferă următoarele metode:

Fiecare metodă returnează valoarea tipului de bază specificat. De exemplu, de tip lung obiect poate returna o valoare a unuia dintre încorporate tipuri numerice, inclusiv scurt, dublu sau lung.

valori în obiectul procesului de încapsulare numit un ambalaj (box). Înainte de apariția Java 2 versiunea 5.0, toate ambalajele se face manual de către programator prin crearea unei instanțe a mantalei cu valoarea dorită. In descrierea de mai sus șirul valorii de cod 100 este ambalat în manual Integer tip de obiect:

Procesul de extragere a valorilor de tip membrane numite dezambalare (unboxing). Și încă o dată, înainte de apariția Java 2 versiunea 5.0 toate despachetarea se face manual prin apelarea metodei shell pentru a obține valoarea obiectului.

Următoarea linie de cod valoare de obiect IOB neambalate tip int variabil manual:

În acest caz intValue () returneaza o valoare de obiect de tip int IOB. Așa cum sa explicat mai devreme, există și alte metode pentru a elimina obiectul din valoarea unui alt tip numeric, cum ar fi un octet, scurt, lung, dublu sau float. De exemplu, pentru a obține valoarea de lungă tip IOB obiect ar trebui să apelați iOb.longValue () metoda. Astfel, valoarea poate fi despachetat tip variabil simplu diferit de tipul de coajă.

Începând cu versiunea originală a limbajului Java, pentru ambalarea și despachetarea manual efectuați aceeași procedură de bază prezentate în exemplele anterioare. Deși această metodă de ambalare și a lucrărilor de despachetare, este obositor și predispus la erori, deoarece este nevoie de programator pentru a crea manual un obiect adecvat pentru ambalarea valorilor și, dacă este necesar, despachetarea stabilite în mod explicit variabila corespunzătoare tipului de bază. Din fericire, Java 2, v5.0 radical modernizarea acestor proceduri importante, introducerea instrument avtoupakovki / decompresie.

Bazele avtoupakovki / decompresie

avtoupakovke Datorită elimină necesitatea de a crea manual obiect pentru a încapsula valorile unui tip simplu. Trebuie doar să atribui această valoare la un pointer la un tip de obiect-shell. Limbajul Java este creat automat pentru tine acest obiect. Următoarea linie este un exemplu al unei metode pentru proiectarea obiectelor moderne de tip Integer, stocarea o valoare de 100:

Vă rugăm să rețineți că nici un obiect nu este creat folosind în mod explicit operația nouă. Limbajul Java va efectua acest lucru în mod automat.

Toate piesele sunt făcute pentru tine limbajul Java.

Listarea 2.1 prezintă un scurt program care încorporează toate fragmentele de mai sus și demonstrează mecanismul de bază despre avtoupakovki / decompresie

Listarea 2.1. cerere Demonstrarea avtoupakovki / decompresie

Rețineți din nou că nu trebuie să creeze în mod explicit un obiect Integer la pachet o valoare de 100, și nu este nevoie de a apela intValue () metoda este de a despacheta această valoare.

Avtoupakovka și metode

Listarea 2.2. Avtoupakovka / decompresie parametrilor metodei și valorile reveni la ele

2.2 Listarea programul afișează următoarele rezultate așteptate:

În metoda programului de mai sus stabilește un parametru de tip Integer și returnează un rezultat int. Principala () metoda de corp m () este transmisă 100. se așteaptă un obiect de tip Integer, valoare ambalate automat au transmise. În continuare, o metodă care returnează echivalentul argumentului său, ci un simplu tip int. Acest lucru conduce la o despachetare automată în variabila v. Mai mult, metoda main () obiectul IOB se atribuie o valoare de tip int, care provoaca avtoupakovku acestuia. Principalul avantaj este faptul că toate conversiile sunt efectuate automat.

Avtoupakovka / despachetarea în expresii

In general, avtoupakovka / decompresie are loc ori de câte ori este necesar, în conversia obiectului sau a obiectului. Acest lucru este valabil și pentru expresiile. Ei obiect numeric despachetat automat. Rezultatul expresiei re-ambalate, dacă este necesar. Luați în considerare programul în 2.3.

2.3. Avtoupakovka / decompresie în interiorul expresiilor

Următoarele este încheierea programului, care prezintă rezultatele activității sale.

Acordați o atenție deosebită la următoarea linie de cod în Listing 2.3:

Aceasta determină o creștere a valorii unitare a obiectului ambalat în IOB. Această acțiune este după cum urmează: IOB obiect este decomprimat, valoare crește, iar rezultatul este re-ambalate.

Listarea 2.4. Procesarea obiecte numerice de diferite tipuri în aceeași expresie

Următoarele este rezultatul programului din Figura 2.4.

După cum puteți vedea, Dob și un obiect dublu și IOB un obiect Integer implicat în plus, iar rezultatul a fost re-ambalate și depozitate în DOB obiect.

Atunci când expresia este evaluată într-o declarație comutator, obiect IOB despachetat este preluat și int.

Aceste exemple de programe arată că prezența avtoupakovki / decompresia face uz de obiecte numerice în termeni de ușor și intuitiv. In trecut, acest cod ar trebui să inserați apeluri de metode, cum ar fi intValue ().

Avtoupakovka / despachetarea valori de simboluri logice și

Cu excepția carcase pentru tipurile numerice, limbajul Java oferă, de asemenea, un înveliș pentru boolean tipuri de date și char. Ele sunt numite boolean, Caracter, respectiv. Acestea se aplică, de asemenea, avtoupakovka / despachetarea. Luați în considerare programul în Listing 2.5.

Listarea 2.5. Avtoupakovka / decompresie de tip Boolean și Caracter

Ceea ce urmează este încheierea programului în Listarea 2.5, care prezintă rezultatele activității sale:

Mai mult decât atât, acum un obiect boolean poate fi folosit pentru a controla orice operatorii Java-ciclu. Când un obiect Boolean este folosit ca expresie condițională în buclă în timp ce, pentru, face / în timp ce, despachetat automat în echivalentul unui tip boolean primitiv. De exemplu, următorul fragment este acum absolut corectă.

Ajutor avtoupakovki / decompresie în prevenirea erorilor

În plus față de confort, care oferă un mecanism avtoupakovki / despachetare, acesta poate ajuta la prevenirea erorilor. Luați în considerare programul în Listing 2.6.

Listarea 2.6. Au apărut erori despachetarea manual

Măsuri de precauție

Acum, că limbajul Java include instrumente avtoupakovki / decompresie, ar putea fi tentat să folosească doar obiecte numerice sau de tip Integer dublu, abandonând complet simple tipuri de date. De exemplu, datorită avtoupakovki / despachetare este acum posibil să se scrie un cod ca cel de mai jos.

EXEMPLUL slabă utilizare avtoupakovki / decompresie Double a, b, c;

1. Mai puțin de jumătate de an, deoarece a fost o dată amintit Java 5 acolo :)
2.

În ciuda câștigurilor de performanță oferite de tipurile de bază, există situații care necesită depunerea obligatorie a unui obiect. De exemplu, nu puteți trece variabila la metoda de tipul de bază ca parametru de referință. [Quote]

3.
[Quote] int m (Integer v) <
întoarce v; // auto-Unbox int
>

Ajutor avtoupakovki / decompresie în prevenirea erorilor

---------------
Ne pare rău pentru meu română
Andriy Zayats aka Rebbit
BR

articole similare