Bevezetés az automatikus és a dobozoláshoz a Java-ban

Az Autoboxing az automatikus átalakítás, amelyet a Java fordító végrehajt a primitív típusok és a hozzájuk tartozó objektumcsomagoló osztályok között, azaz átalakítás intről Integerre, kettősből Doublera stb. int stb. Ezt a funkciót bevezették a java 1.5-ös verziójába, az autoboxba és a dobozba, ahogy a JRE által kezelt automatikus folyamatokban is, itt a legfontosabb a megfelelő kód írása, amely nem ad hozzá felesleges felesleges tárgyakat a képhez.

Most megvitatjuk, hogyan működik az Autobox és Unbox a Javaban -

  • A fordító az valueOf () metódust használja a primitívumok konvertálására a megfelelő wrapper objektumokra (azaz autoboxingra) belsőleg, fordítva az intValue (), doubleValue () stb., Mint pl.
  • Referenciaként az alábbiakban említjük a burkolólapot és a java-ban feltérképező primitíveket -
Primitív típusCsomagoló osztály
logikailogikai
byteByte
faszénkarakter
úszóÚszó
intEgész szám
hosszúHosszú
rövidRövid
kettősKettős

Példák -

  • Vegyük most egy egész számok ArrayList-jét, majd használjuk a dobozolás nélküli koncepciót -

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

  • Ennélfogva, a fenti példában, miközben hozzáadunk értéket az x-hez, látjuk, hogy x primitívnek tűnik, tehát a kicsomagolás itt automatikusan megtörténik, amíg ez a hozzárendelés megtörténik.

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

  • Alig fent mutattunk egy -2 példát ebben az összefüggésben, ahol bemutattunk egy tipikus forgatókönyvet. Ha megismerted a java-ban lévő objektumok létrehozásával, akkor láthatja, hogy “Integer sum = 0” deklarálja az objektumot, és amikor kiszámoljuk a for hurok belsejében, akkor láthatjuk, hogy “i” primitív értéket adunk a wrapperhez. összeg".
  • Megállapítható tehát, hogy először a burkológépről primitívre konvertálódik, mivel a „+” operátor csak primitíveken működik, és így először az objektum kicsomagolása történik, akkor a számítás megtörténik, majd az objektum autoboxingja ismét megtörténik, majd az érték az „összeg” változóhoz lesz hozzárendelve.
  • Ez felesleges fölösleget jelent a JVM-en, mivel sok köztes egész objektum kerül létrehozásra és megsemmisül (később hulladékgyűjtés céljából), ezáltal lelassulhat, tehát az ilyen logikákat körültekintően kell kezelni.
  • Lássuk most az általános észlelésektől eltérő feltételeket, és lesz néhány kód, ahol az autobox és a doboz eltávolítása nagyon fontos, hogy megértsük -

Fontolja meg az alábbiak szerint elhelyezett kivonatot, mit gondol, mi lesz ennek kimenete?

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

  • Ha azt mondja, hogy "igaz", akkor "hamis", mert a kimenet is "hamis", azért van, mert így csak a -128 és 127 közötti egész tartományt hasonlíthatjuk össze, az ezen a tartományon kívül eső értékekkel bontatlan.
  • Ezért össze kell hasonlítanunk a fenti egész számok intValue () értékét, egyelőre a fordító ezt az valueOf () tulajdonság használatával teszi meg.
  • Valószínűleg, ha ez a fentebb idézett tartományba esik, akkor a fenti kód valódi lesz, mivel először az egész szám literális készletére vonatkozik összehasonlítás céljából.

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

Ez az „igaz” értékre fog értékelni, mivel 100 van jelen a literális készletben.

Autobox és Unboxing Java módszerterheléssel

  • Mielőtt megneveznénk az automatikus dobozolást és a dobozt a metódus túlterheléshez, feltételezzük, hogy az olvasó megismeri a módszer túlterhelésének fogalmát, csak kevés betekintést nyújtunk, és további információkért kérjük, olvassa el az Oracle dokumentációját.
  • A módszer túlterhelése egy olyan folyamat, amelynek során ugyanazt a metódusnevet különböző számú bemeneti argumentummal, az azonos nevű változók különböző adattípusait használják, stb., Általában bármely számítási módszer több változatának bemutatására.
  • Vegyünk egy példát ehhez, hogy mélyebben megértsük, és bemutatjuk a kimenetet is, amely ezúttal a képen látható -

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

Kimenet -

a doboz nélküli érték kinyomtatása 5
kinyomtatja az autoboxed értéket 5

Megjegyzés: A fenti programot bármelyik IDE-ben végrehajthatja, hogy a fenti kimenettel rendelkezzen.

  • Ennélfogva a fenti viselkedés egyértelműen megmondja, hogy az autoboxing technikának jelentős haszna van a túlterhelési koncepciókban, és kódoláskor óvatosan kell használni.

Az Autobox és Unboxing előnyei a Java-

  • A megfelelő konvertálást a fordító automatikusan elvégzi.
  • A fejlesztõnek feltételeznie kell, hogy kevesebb kódot ír, és ezzel tisztább kódot.
  • Nincs szükség kézi típusú casting kifejezésekre.

Következtetés

Láttuk az automatikus és a dobozos dobozok felhasználásának esetét, hogy mennyire implicit ez a koncepció, és hol teremt előnye és hátránya. A kódolás során óvatosan kell használni, különben összeadhatja a felesleges számítási konvertálási költségeket, így az átalakításokat a primitívekben kell elvégezni, hogy elkerüljék a túlzott hulladékgyűjtési költségeket és a túlzott ideiglenes tárgyak létrehozását. Láttuk azt is, hogy milyen esetekben alkalmazzák az autoboxot a java túlterhelési koncepciójával, ezzel párhuzamosan ellenőrizhetünk még néhány korlátozást.

Ajánlott cikkek

Ez egy útmutató az Autoboxing és a Unboxing használatához Java-ban. Itt azt is megvitatjuk, mi az Autoboxing és Unboxing a Java-ban? hogyan működik belsőleg néhány mintakóddal? A további javasolt cikkeken keresztül további információkat is megtudhat -

  1. Mi a JDBC?
  2. Mi a Generics a Java-ban?
  3. Groovy vs Java
  4. Mi a Java öröklés?
  5. Példák és hogyan működnek a generikus gyógyszerek a C # -ben
  6. JRE vs JVM | A 8 legfontosabb különbség az (infographics) között

Kategória: