Úvod do Autoboxingu a odblokovania v Jave

Autoboxing je automatická konverzia, ktorú kompilátor Java vykonáva medzi primitívnymi typmi a ich zodpovedajúcimi triedami obalových objektov, tj konverzia z int na celé číslo, dvojitá na Double atď. Unboxing je automatická konverzia z objektov triedy wrapper na ich ekvivalentné primitívy, tj celé číslo na int atď. Táto funkcia bola zavedená vo verzii java, autoboxing a unboxing 1.5, ako sú automatické procesy spracovávané JRE, najdôležitejším bodom je tu napísanie správneho kódu, ktorý nepridáva na obrázok príliš zbytočné objekty.

Teraz sa porozprávajte o internom fungovaní Autoboxingu a Unboxingu v Jave -

  • Kompilátor používa metódu valueOf () na konverziu primitívov na zodpovedajúce objekty typu wrapper (tj autoboxing) interne, v opačnom prípade používa vzory na rozbalenie typu intValue (), doubleValue () atď.
  • Pre porovnanie uvádzame mapovanie obalov a primitívov v jave -
Primitívny typTrieda balenia
booleanboolean
bytebyte
spáliťznak
plavákPlavák
intcelé číslo
dlhodlho
krátkyKrátky
dvojitýdvojitý

Príklady -

  • Zoberme si teraz zoznam polí celých čísel a potom využijeme koncept rozbalenia -

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);
)
)

  • Preto v príklade uvedenom vyššie, keď pridávame hodnotu do x, vidíme, že x sa javí ako primitívny, takže vyprchávanie tu nastane automaticky, keď sa toto priradenie uskutoční.

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);
)
)

  • Práve vyššie sme v tomto kontexte ukázali príklad -2, kde bol uvedený typický scenár. Ak ste oboznámení s tvorbou objektov v jave, môžete vidieť, že „Integer sum = 0“, deklaruje objekt, a keď počítame vo vnútri slučky for, potom vidíme, že primitívna hodnota „i“ sa pridáva do wrappera “ sum ".
  • Preto je možné zistiť, že najskôr dôjde k prevodu z wrapperu na primitívny, pretože operátor „+“ pracuje iba na primitívnych prvkoch, a preto najskôr dôjde k odblokovaniu objektov, potom dôjde k výpočtu, potom opäť k autoboxovaniu objektov a potom k hodnote bude priradená premennej „suma“.
  • To predstavuje zbytočnú réžiu na JVM, pretože sa vytvorí mnoho stredných celočíselných objektov, ktoré sa zničia (aby sa neskôr zozbierali odpadky), takže sa môže objaviť spomalenie, takže s takou logikou sa musí zaobchádzať opatrne.
  • Pozrime sa teraz na podmienky odlišné od všeobecného vnímania a budeme mať nejaký kód, v ktorom bude veľmi dôležité porozumieť autoboxovaniu a rozbaľovaniu -

Zoberme si úryvok umiestnený nižšie, čo podľa vás bude výsledkom?

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

  • Ak hovoríte „true“, potom ste „false“, pretože výstup je tiež „false“, je to preto, že môžeme porovnávať iba celé číslo od -128 do 127, ako je táto, pre hodnoty, ktoré idú z tohto rozsahu, majú byť unboxed.
  • Preto musíme porovnávať intValue () vyššie uvedených celých čísel, zatiaľ to kompilátor robí pomocou vlastnosti valueOf ().
  • Pravdepodobne, ak to spadá do vyššie uvedeného rozsahu, potom vyššie uvedený kód, ako je, bude pravdivý, pretože sa najprv bude porovnávať s celočíselným literálnym fondom.

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

Toto sa vyhodnotí na „skutočnú“ hodnotu, keďže 100 je v literálnom fonde.

Autoboxing a Unboxing v Jave s preťažením metódou

  • Predtým, ako označíme autoboxing a unboxing na preťaženie metód, predpokladá sa, že čitateľ je oboznámený s konceptom preťaženia metód, len poskytneme malé informácie a pre viac informácií si pozrite dokumentáciu Oracle.
  • Preťaženie metódy je proces, pri ktorom sa používa rovnaký názov metódy s rôznym počtom vstupných argumentov, rôznych typov údajov premenných s rovnakými názvami atď., Ktoré sa všeobecne používajú na predloženie viacerých variantov akejkoľvek metódy výpočtu.
  • Vezmime príklad, aby sme tomu porozumeli hlbšie a predstavíme výstup, ktorý sa tentoraz objaví na obrázku -

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);
)
)

Výkon -

tlač nezatlačenej hodnoty 5
tlač autoboxovanej hodnoty 5

Poznámka - vyššie uvedený program môžete spustiť v ktoromkoľvek z IDE, aby ste dostali vyššie umiestnený výstup.

  • Preto vyššie uvedené správanie jasne hovorí, že technika autoboxovania má významné využitie v koncepciách preťaženia a pri kódovaní sa musí používať opatrne.

Výhody autoboxovania a odblokovania v Java-

  • Príslušnú konverziu vykoná automaticky kompilátor.
  • Vývojár by mal písať menší kód, a tým čistší kód.
  • Nevyžadujú sa manuálne výrazy typu casting.

záver

Videli sme prípad použitia autoboxingu a rozbalenia, aký implicitný je tento koncept a kde môže vytvárať klady a zápory. Pri kódovaní sa musí používať opatrne, inak môže pridať nadbytočné výpočtové režijné náklady, preto sa musia konverzie vykonať v primitívach, aby sa predišlo nadmernému režijnému zberu odpadu a nadmernému vytváraniu dočasných objektov. Videli sme aj prípad použitia autoboxingu s konceptom preťaženia java, môžete skontrolovať niekoľko ďalších obmedzení.

Odporúčané články

Toto bol sprievodca pre Autoboxing a Unboxing v Jave. Tu sa tiež venujeme téme Čo je to Autoboxing a Unboxing v jave? ako to funguje interne s niektorými ukážkovými kódmi? Viac informácií nájdete aj v ďalších navrhovaných článkoch -

  1. Čo je to JDBC?
  2. Čo je generika v jazyku Java?
  3. Groovy vs Java
  4. Čo je dedičstvo Java?
  5. Príklady a ako generiká fungujú v jazyku C #
  6. JRE vs JVM | 8 najlepších rozdielov s (infografika)

Kategórie: