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 tipa | Klasa omotača |
boolean | Booleova |
bajt | Bajt |
čađ | Lik |
plutati | Plutati |
int | Integer |
dugo | dugo |
kratak | Kratak |
dvostruko | Dvostruko |
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 -
- Što je JDBC?
- Što je generika u Javi?
- Groovy vs Java
- Što je nasljeđivanje Java?
- Primjeri i način na koji generički djeluju u C #
- JRE vs JVM | Top 8 razlike s (Infographics)