Introducere în Autoboxing și Unboxing în Java

Autoxoxing-ul este conversia automată pe care compilatorul Java o face între tipurile primitive și clasele lor de înveliș de obiecte corespunzătoare, adică conversia de la int la Integer, dublu la dublu, etc. Unboxing-ul este conversia automată de la obiecte de clasă wrapper la primitive echivalente lor, adică Integer la int etc. Această caracteristică a fost introdusă în versiunea 1.5 a java, a autocontrolului și a deconectării, așa cum sunt procesele automate gestionate de JRE, cel mai important punct aici ajunge să scrie cod adecvat, care nu adaugă obiecte inutile în exces.

Acum să discutăm cum funcționează intern Autoxoxing și Unboxing în Java -

  • Compilerul folosește metoda valueOf () pentru a converti primitivele în obiecte de învelire corespunzătoare (adică autoboxing) intern, în cazul invers folosesc intValue (), doubleValue () etc., ca paradigme pentru unboxing.
  • Pentru referință, învelișul și maparea primitivă în java este menționat mai jos -
Tipul primitivClasa Wrapper
booleanboolean
octetbyte
carbonizaCaracter
plutiPluti
intÎntreg
lungLung
mic de staturaMic de statura
dublaDubla

Exemple -

  • Să luăm acum o ArrayList of Integers, apoi să folosim conceptul de unboxing -

import java.util.ArrayList;
public class MyClass (
public static void main(String args()) (
ArrayList intlist = new ArrayList();
//wrapper Integer objects being added here
intlist.add(1);
interest.add(2);
//auto-unboxing is happening here
int x = intlist.get(0);
System.out.println(x);
)
)

  • Prin urmare, în exemplul de mai sus, în timp ce adăugăm valoare la x, vedem că x pare a fi un primitiv, deci unboxing-ul se întâmplă aici automat în timp ce această atribuire este făcută.

public class MyClass (
public static void main(String args()) (
Integer sum =0;
for(int i=0;i<10;i++)
(
sum = sum + i;
)
System.out.println(sum);
)
)

  • Chiar mai sus am arătat un exemplu -2 în acest context, în care a fost prezentat un scenariu tipic. Dacă cunoașteți crearea de obiecte în Java, puteți vedea că „Suma integrală = 0”, declară un obiect, iar când facem calcul în bucla for atunci putem vedea că valoarea primitivă „i” este adăugată la wrapper „ sumă".
  • Prin urmare, se poate constata că, mai întâi, va avea loc conversia de la înveliș în primitiv, deoarece operatorul „+” funcționează doar pe primitive și, prin urmare, se va întâmpla deconectarea obiectelor, apoi se va face calculul, apoi autoboxingul obiectului va reveni și apoi valoarea va fi alocat variabilei „sumă”.
  • Acest lucru prezintă o aerisire inutilă pe JVM, deoarece multe obiecte intermediare intermediare vor fi create și vor fi distruse (pentru a fi colectate ulterior gunoiul), astfel pot apărea încetinirea, astfel încât aceste logici vor fi gestionate cu grijă.
  • Să vedem acum condiții diferite de percepțiile generale și vom avea un cod în care autoboxingul și unboxing-ul devin foarte importante pentru a fi înțelese -

Luați în considerare fragmentul plasat mai jos, care credeți că va fi rezultatul acestui lucru?

public class Main
(
public static void main(String() args) (
Integer m = 34123;
Integer x = 34123;
System.out.println(x==m);
)
)

  • Dacă spuneți „adevărat”, atunci sunteți „fals”, deoarece ieșirea este și „falsă”, se datorează faptului că putem compara doar întreaga gamă între -128 și 127 astfel, pentru valorile care ies din acest interval trebuie să fie unboxed.
  • Prin urmare, trebuie să comparăm intValue () din numerele de mai sus, deocamdată, compilatorul face acest lucru folosind proprietatea valueOf ().
  • Probabil, dacă acest lucru se încadrează în intervalul citat mai sus, atunci codul de mai sus, așa cum este, va da adevărat, deoarece se va referi mai întâi la setul literal întreg pentru comparație.

public class Main
(
public static void main(String() args) (
Integer m = 100;
Integer x = 100;
System.out.println(x==m);
)
)

Aceasta va evalua valoarea „adevărată”, deoarece 100 este prezent în pool-ul literal.

Autoxoxing și Unboxing în Java cu supraîncărcare a metodei

  • Înainte de a eticheta autoboxing-ul și deconectarea la supraîncărcarea metodei, se presupune că cititorul cunoaște conceptul de supraîncărcare a metodei, vom oferi doar mici informații și pentru mai multe, consultați documentația Oracle despre aceeași.
  • Supraîncărcarea metodei este un proces în care același nume de metodă este utilizat cu un număr diferit de argumente de intrare, diferite tipuri de date de variabile cu aceleași nume etc., se utilizează pentru a prezenta mai multe variante ale oricărei metode de calcul în general.
  • Să luăm un exemplu pentru același lucru pentru a-l înțelege mai profund și vom prezenta, de asemenea, ieșirea care apare în imagine de data aceasta -

public class Main
(
public static void main(String() args) (
Overload obj = new Overload();
int i =5;
obj.printval(5);
Integer m = i;
obj.printval(m);
)
)
class Overload
(
public void printval(int i)
(
System.out.println("printing the unboxed value "+ i);
)
public void printval(Integer i)
(
System.out.println("printing the autoboxed value "+ i);
)
)

Rezultat -

tipărirea valorii 5
tipărirea valorii autoboxed 5

Notă - puteți executa programul de mai sus în oricare dintre IDE-urile pentru a avea o ieșire plasată mai sus.

  • Prin urmare, comportamentul de mai sus spune clar că tehnica de autoexploatare are o utilizare semnificativă în conceptele de supraîncărcare și trebuie utilizată cu grijă în timpul codării.

Avantajele Autoboxing și Unboxing în Java-

  • Conversia corespunzătoare se face automat de către compilator.
  • Se presupune că dezvoltatorul scrie un cod mai mic și, prin urmare, un cod mai curat.
  • Nu este nevoie de expresii manuale de turnare.

Concluzie

Am văzut cazul de utilizare a autoboxing-ului și a unboxing-ului, cât de implicit este acest concept și unde poate crea pro și contra. Trebuie să fie utilizat cu grijă în timp ce codează, altfel poate adăuga cheltuielile de conversie inutile ale conversației computaționale, prin urmare, conversiile se vor face în primitive pentru a evita colectarea excesivă a gunoiului și crearea excesivă de obiecte temporare. Am văzut, de asemenea, cazul de utilizare a autocontrolului cu conceptul de suprasarcină de java, puteți verifica alte câteva constrângeri împreună cu acest lucru.

Articole recomandate

Acesta a fost un ghid pentru Autoboxing și Unboxing în Java. Aici vom discuta, de asemenea, Ce este Autoboxing și Unboxing în Java? cum funcționează intern cu unele coduri de eșantion? Puteți parcurge și alte articole sugerate pentru a afla mai multe -

  1. Ce este JDBC?
  2. Ce este Generics în Java?
  3. Groovy vs Java
  4. Ce este moștenirea Java?
  5. Exemple și mod de funcționare a genericilor în C #
  6. JRE vs JVM | Top 8 diferențe cu (Infografie)