Uvod u Autoboxing i Unboxing na Javi

Automatsko bokiranje je automatska pretvorba koju Java kompajler vrši između primitivnih vrsta i odgovarajućih klasa omota objekata, tj. Pretvaranje iz int u Integer, dvostruko u Double i sl. Unboxing je automatsko pretvaranje iz predmeta klase omota u njihove ekvivalentne primitive, tj. Integer to int itd. Ova značajka uvedena je u verziji 1.5 Java, automatskog boksiranja i raspakiranja, kao što su automatski procesi kojima upravlja JRE, ovdje je najvažnija točka pisanja pravilnog koda koja ne dodaje prekomjerne nepotrebne predmete na slici.

Sada razgovarajmo o tome kako Autobox i Unboxing u Javi djeluju interno -

  • Kompiler koristi metodu valueOf () za interno pretvaranje primitiva u odgovarajuće objekte omotača (tj. Automatsko bokiranje), obrnuto, koristi intValue (), doubleValue () itd., Poput paradigmi za otpakiranje.
  • Za usporedbu, mapiranje omota i primitiva u javi spomenuto je dolje -
Primitivnog tipaKlasa omotača
booleanBooleova
bajtBajt
čađLik
plutatiPlutati
intInteger
dugodugo
kratakKratak
dvostrukoDvostruko

Primjeri -

  • Uzmimo ArrayList of Integers sada, a zatim iskoristimo koncept unboxinga -

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

  • Dakle, u gornjem primjeru, dok dodajemo vrijednost x, vidimo da je x primitivan, pa se ovdje raspakiranje automatski događa dok se ovaj zadatak obavlja.

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

  • Malo iznad pokazali smo primjer -2 u ovom kontekstu, gdje je predstavljen tipičan scenarij. Ako ste upoznati s stvaranjem objekta u Javi, možete vidjeti da "Integer sum = 0" izjavljuje objekt, a kad radimo izračun unutar petlje for, tada možemo vidjeti da se primitivna vrijednost "i" dodaje u omotač " iznos".
  • Stoga se može ustanoviti da će se najprije dogoditi pretvaranje iz omota u primitivni, jer "+" operator radi samo na primitivima, pa će se najprije dogoditi raspakiranje objekta, zatim računanje, zatim ponovno automatsko pretvaranje objekata i ponovno vrijednost bit će dodijeljena varijabli "zbroj".
  • To predstavlja nepotrebne režijske troškove na JVM-u, jer će se stvoriti mnogi intermedijarni objekti i uništiti (kasnije se skupljati smeće), te će se usporiti, pa se s takvom logikom treba postupati pažljivo.
  • Pogledajmo sada uvjete drugačije od općih percepcija i imat ćemo neki kôd gdje će autoboxing i unboxing postati vrlo važni za razumijevanje -

Razmislite o isječku koji se nalazi ispod, što mislite kako će biti rezultat ovoga?

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

  • Ako kažete "istina" onda ste "lažni", jer je i izlaz "lažan", to je zato što možemo usporediti samo cijeli broj od -128 do 127 ovako, za vrijednosti koje izlaze iz ovog raspona one trebaju biti kutijice.
  • Stoga trebamo usporediti intValue () gornjih Integersa, a za sada prevoditelj to čini pomoću svojstva valueOf ().
  • Vjerojatno će, ako ovo padne u gore navedenom rasponu, gornji kôd, kakav jest, biti istinit jer će se za usporedbu prvo uputiti na cijeli broj doslovnih slojeva.

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

To će se procijeniti na "istinsku" vrijednost, jer je 100 prisutno u doslovnom okviru.

Autoboxing i Unboxing u Javi s preopterećenjem metoda

  • Prije nego što označimo automatsko spremanje i raspakiranje preopterećenjem metode, pretpostavlja se da je čitatelj upoznat s konceptom preopterećenja metode, dat ćemo samo malo uvida, a za više, pogledajte dokumentaciju Oracle-a o istom.
  • Preopterećenje metoda je proces u kojem se isti naziv metode koristi s različitim brojem ulaznih argumenata, različitim vrstama podataka varijabli s istim imenima itd., Koji se općenito koriste za prikaz više varijanti bilo koje metode računanja.
  • Uzmimo za primjer da isti to shvati dublje, a mi ćemo također predstaviti izlaz koji se na slici pojavljuje ovoga puta -

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

Izlaz -

ispis neboksirane vrijednosti 5
ispis automatske kutije 5

Napomena - gornji program možete izvršiti u bilo kojem IDE-u da biste imali gore postavljeni izlaz.

  • Stoga gore navedeno ponašanje jasno govori da tehnika automatskog boksiranja ima značajnu uporabu u konceptima preopterećenja te će se s oprezom koristiti kodiranjem.

Prednosti automatskog boksa i unboxinga na Java-

  • Pregovarač automatski izvršava odgovarajuću pretvorbu.
  • Programer bi trebao napisati manji kod i time čistiji kod.
  • Nema potrebe za ručnim izrazima za lijevanje tipa.

Zaključak

Vidjeli smo primjere automatskog boksiranja i otpakiranja, koliko je ovaj koncept implicitan i gdje može stvoriti prednosti i nedostatke. Morate se pažljivo koristiti kodiranjem, jer u protivnom može dodati nepotrebne računske pretvorbe, stoga će se pretvoriti u primitivima kako bi se izbjeglo pretjerano prikupljanje smeća i pretjerano stvaranje privremenih predmeta. Također smo vidjeli i slučaj upotrebe automatskog boksa s konceptom preopterećenja Java, uz ovo možete provjeriti još nekoliko ograničenja.

Preporučeni članci

Ovo je vodič za automatsko spremanje i unboxing na Javi. Ovdje smo također raspravljali Što je automatsko bokiranje i unboxing u Javi? kako djeluje interno s nekim uzorcima kodova? Možete i proći naše druge predložene članke da biste saznali više -

  1. Što je JDBC?
  2. Što je generika u Javi?
  3. Groovy vs Java
  4. Što je nasljeđivanje Java?
  5. Primjeri i način na koji generički djeluju u C #
  6. JRE vs JVM | Top 8 razlike s (Infographics)

Kategorija: