Uvod v Autoboxing in Unboxing na Javi

Autoboxing je samodejna pretvorba, ki jo prevajalnik Java opravi med primitivnimi vrstami in ustreznimi razredi ovojnih predmetov, tj. Pretvorba iz int v Integer, dvojno v Double itd. Unboxing je samodejna pretvorba iz predmetov razreda ovojnic v njihove enakovredne primitive, tj. Integer to int itd. Ta funkcija je bila uvedena v različici 1.5 java, samodejnega shranjevanja in razpakiranja, kot tudi samodejni procesi, ki jih upravlja JRE, pri čemer je najpomembnejša točka, da napišete pravilno kodo, ki na sliki ne doda preveč nepotrebnih predmetov.

Zdaj pa razpravimo, kako samodejno brskanje in razpakiranje na Javi delujeta notranje -

  • Prevajalnik uporablja metodo valueOf () za pretvorbo primitivov v ustrezne objekte ovoja (tj. Avtoboksiranje) v notranjosti, v obratnem primeru pa uporablja uporabo intValue (), doubleValue () itd., Kot paradigme za razpakiranje.
  • Za referenco je kartiranje ovoj in primitivov v javi navedeno spodaj -
Primitivni tipRazred zavijanja
booleanBoolov
bajtaBajta
charLik
lebdetiPlovec
intInteger
dolgadolga
kratekKratek
dvojnoDvojna

Primeri -

  • Vzemimo ArrayList of Integers zdaj in nato uporabimo koncept 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);
)
)

  • Torej v zgornjem primeru, medtem ko dodamo vrednost x, vidimo, da je x videti kot primitiven, zato se tukaj razveljavitev samodejno zgodi, medtem ko je ta dodelitev opravljena.

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

  • Tik zgoraj smo prikazali primer -2 v tem kontekstu, kjer je bil predstavljen tipičen scenarij. Če ste seznanjeni z ustvarjanjem predmetov v javi, lahko vidite, da "Integer sum = 0", objekt razglasi, in ko naredimo izračun znotraj zanke for, potem lahko vidimo, da se v ovojnik doda primitivna vrednost "i" vsota ”.
  • Torej je mogoče najti, da se bo najprej zgodila pretvorba iz ovoja v primitivni, saj operater "+" deluje samo na primitivih, torej se bo najprej razpakiralo objekt, nato pa bo prišlo do računanja, nato pa se bo spet pojavilo samodejno povezovanje predmetov in nato vrednost se dodeli spremenljivki „vsota“.
  • To na JVM predstavlja nepotrebne režijske stroške, saj bo nastalo veliko vmesnih predmetov Integer in jih bodo uničili (pozneje se bodo smeti zbrale), s čimer se lahko upočasni, zato je treba s takšno logiko ravnati previdno.
  • Poglejmo zdaj razmere, ki se razlikujejo od splošnih dojemanj, in imeli bomo neko kodo, kjer bosta razumevanje samodejnega pošiljanja sporočil in razklapljanje -

Razmislite o delčku spodaj, kaj mislite, da bo rezultat tega?

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

  • Če govorite "resnično", potem ste "lažni", ker je izhodni podatek tudi "napačen", ker lahko primerjamo le celoštevilčno območje od -128 do 127, kot je ta, za vrednosti, ki gredo iz tega obsega, naj bodo nepakirano.
  • Zato moramo primerjati intValue () zgornjih Integerjev, zaenkrat prevajalnik to naredi s pomočjo lastnosti valueOf ().
  • Verjetno, če to sodi v zgoraj navedeni obseg, bo zgornja koda, kakršna je, resnična, saj se bo za primerjavo najprej sklicevala na celoten dobesedni bazen.

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

To bo ocenjeno na "resnično" vrednost, saj je 100 prisotnih v dobesednem območju.

Autoboxing in Unboxing na Javi z metodo preobremenitve

  • Preden označimo samodejno shranjevanje in razpakiranje na preobremenitev z metodami, predvidevamo, da je bralec seznanjen s konceptom preobremenitve z metodami, dali bomo le malo vpogledov in za več, glejte dokumentacijo Oracle o istem.
  • Preobremenitev metode je postopek, pri katerem se isto ime metode uporablja z različnim številom vhodnih argumentov, različnimi vrstami podatkov spremenljivk z istimi imeni itd., Ki se uporabljajo za splošno predstavitev več različic katere koli metode računanja.
  • Vzemimo primer za isto, da ga globlje razumemo in tudi tokrat bomo predstavili izhod, ki se pojavi na sliki -

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

Izhod -

tiskanje neboksirane vrednosti 5
tiskanje avtomatske vrednosti 5

Opomba - zgornji program lahko izvedete v katerem koli IDE-ju, da imate zgoraj postavljen izhod.

  • Torej zgornje vedenje jasno pove, da ima tehnika avtoboksiranja veliko uporabo pri konceptih preobremenitve in jo je treba pri kodiranju uporabljati previdno.

Prednosti samodejnega boksanja in razklapljanja v Java-

  • Ustrezno pretvorbo izvede prevajalnik samodejno.
  • Razvijalec naj bi napisal manjše kodo in s tem čistejšo kodo.
  • Ni treba ročno vnašati izrazov.

Zaključek

Videli smo, kako uporabiti avtoboxing in unboxing, kako impliciten je ta koncept in kje lahko ustvari prednosti in slabosti. Pri kodiranju ga je treba uporabljati previdno, v nasprotnem primeru lahko sešteje nepotrebne nadomestne računske pretvorbe, tako da se pretvorbe opravijo v primitivih, da se prepreči prekomerno zbiranje smeti in prekomerno ustvarjanje začasnih predmetov. Videli smo tudi primer uporabe avtoboxa s konceptom preobremenitve jave, poleg tega lahko preverite še nekaj omejitev.

Priporočeni članki

To je vodnik za samodejno shranjevanje in razpakiranje na Javi. Tukaj razpravljamo tudi o tem, kaj je samodejno boksanje in odvezovanje v javi? kako deluje interno z nekaterimi vzorčnimi kodami? Če želite izvedeti več, lahko preberete tudi druge naše predlagane članke -

  1. Kaj je JDBC?
  2. Kaj je generika v Javi?
  3. Groovy proti Javi
  4. Kaj je Java Dediščina?
  5. Primeri in delovanje generike v C #
  6. JRE proti JVM | Najboljših 8 razlik z (Infographics)