Úvod do Autoboxing a Unboxing v Javě

Autoboxing je automatická konverze, kterou kompilátor Java provádí mezi primitivními typy a jejich odpovídajícími třídami obalů objektů, tj. Převod z int na Integer, double na Double atd. Unboxing je automatický převod z objektů třídy wrapper na jejich ekvivalentní primitivy, tj. Integer na int atd. Tato funkce byla představena ve verzi 1.5 java, autoboxing a unboxing, jako jsou automatické procesy zpracovávané JRE, nejdůležitějším bodem zde je psaní správného kódu, který nepřidává zbytečné zbytečné objekty do obrázku.

Nyní pojďme diskutovat o tom, jak Autoboxing a Unboxing v Javě interně funguje -

  • Kompilátor používá metodu valueOf () k převedení primitiv na odpovídající objekty wrapperu (tj. Autoboxing) interně, naopak používá pro rozbalení podobná pravidla jako intValue (), doubleValue () atd.
  • Pro orientaci níže uvádíme mapování obalů a primitivů v javě -
Primitivní typTřída obalů
booleanBoolean
byteByte
charCharakter
plovákPlovák
intCelé číslo
dlouhoDlouho
krátkýKrátký
dvojnásobekDvojnásobek

Příklady -

  • Vezměme si nyní ArrayList of Integers a pak využijte koncept rozbalení -

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

  • Proto ve výše uvedeném příkladu, když přidáváme hodnotu k x, vidíme, že x se zdá být primitivní, takže odkládání probíhá zde automaticky, když je přiřazení provedeno.

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

  • Těsně výše jsme v tomto kontextu ukázali příklad -2, kde byl představen typický scénář. Pokud jste se seznámili s vytvářením objektů v javě, můžete vidět, že „Integer sum = 0“, deklaruje objekt, a když počítáme uvnitř smyčky for, pak můžeme vidět, že primitivní hodnota „i“ je přidávána do wrapperu “ součet".
  • Lze tedy zjistit, že nejprve dojde k převodu z wrapperu na primitiva, protože operátor „+“ pracuje pouze na primitivech, a proto nejprve dojde k odbalení objektu, poté dojde k výpočtu, poté dojde k opětovnému Autoboxing objektu a poté k hodnotě bude přiřazena proměnné „suma“.
  • To představuje zbytečnou režii na JVM, protože bude vytvořeno mnoho mezilehlých objektů Integer a bude zničeno (aby bylo později shromážděno odpadky), takže se může objevit zpomalení, takže s takovou logikou je třeba zacházet opatrně.
  • Podívejme se nyní na podmínky odlišné od obecného vnímání a budeme mít nějaký kód, kde bude velmi důležité pochopit autoboxing a unboxing -

Zvažte úryvek umístěný níže, co podle vás bude výsledkem?

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

  • Pokud říkáte „true“, pak jste „false“, protože výstup je také „false“, je to proto, že můžeme srovnávat pouze celé rozmezí od -128 do 127, jako je tato, pro hodnoty vycházející z tohoto rozsahu mají být bez obalu.
  • Proto musíme porovnat intValue () výše uvedených celých čísel, zatím to kompilátor provede pomocí vlastnosti valueOf ().
  • Pravděpodobně, pokud to spadá do výše uvedeného rozsahu, pak výše uvedený kód, jak je, bude pravdivý, protože se nejprve bude odkazovat na celočíselný literální fond pro srovnání.

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

To se vyhodnotí jako „skutečná“ hodnota, protože 100 je v literálním fondu.

Autoboxing a Unboxing v Javě s přetížením metod

  • Než označíme autoboxing a unboxing na přetížení metody, předpokládá se, že čtenář je obeznámen s konceptem přetížení metody, poskytneme jen malý náhled a další informace najdete v dokumentaci Oracle.
  • Přetížení metody je proces, ve kterém se používá stejný název metody s různým počtem vstupních argumentů, různých datových typů proměnných se stejnými jmény atd., Které se obecně používají k prezentaci více variant jakékoli metody výpočtu.
  • Vezměme si příklad, abychom tomu porozuměli hlouběji a představíme výstup, který se tentokrát objeví 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ýstup -

tisk hodnoty bez pole 5
tisk autoboxed hodnoty 5

Poznámka - výše uvedený program můžete spustit v kterémkoli z IDE, aby měl výše uvedený výstup.

  • Proto výše uvedené chování jasně říká, že technika autoboxingu má významné využití v koncepcích přetížení a při kódování se musí používat opatrně.

Výhody Autoboxing a Unboxing v Javě-

  • Příslušný převod provádí kompilátor automaticky.
  • Vývojář má psát menší kód, a tím čistší kód.
  • Není třeba manuálních výrazů pro odlévání typu.

Závěr

Viděli jsme případ použití autoboxingu a unboxingu, jak implicitně je tento koncept a kde může vytvářet klady a zápory. Při kódování se musí používat opatrně, jinak může přidat zbytečné výpočtové převody režie, proto se musí převody provádět v primitivech, aby se zabránilo nadměrné režii sběru odpadu a nadměrnému vytváření dočasných objektů. Také jsme viděli případ použití autoboxingu s konceptem přetížení javy, můžete s ním zkontrolovat několik dalších omezení.

Doporučené články

Toto byl průvodce aplikací Autoboxing a Unboxing v Javě. Tady také diskutujeme Co je to Autoboxing a Unboxing v javě? jak to funguje interně s některými ukázkovými kódy? Další informace naleznete také v dalších navrhovaných článcích -

  1. Co je to JDBC?
  2. Co je to Generics v Javě?
  3. Groovy vs Java
  4. Co je dědičnost Java?
  5. Příklady a jak generici pracují v C #
  6. JRE vs JVM | 8 hlavních rozdílů s (infografika)

Kategorie: