Wprowadzenie do automatycznego porównywania i rozpakowywania w Javie

Autoboxing to automatyczna konwersja dokonywana przez kompilator Java między typami pierwotnymi i odpowiadającymi im klasami opakowań obiektów, tj. Konwersja z int na Integer, double na Double itp. Unboxing to automatyczna konwersja z obiektów klasy wrapper na ich równoważne operacje podstawowe, tj. Integer na int itp. Ta funkcja została wprowadzona w wersji 1.5 java, autoboxingu i rozpakowaniu, podobnie jak automatyczne procesy obsługiwane przez JRE, najważniejszym punktem jest tutaj napisanie odpowiedniego kodu, który nie dodaje nadmiernych niepotrzebnych obiektów na obrazie.

Porozmawiajmy teraz, jak Autoboxing i Unboxing w Javie idzie wewnętrznie -

  • Kompilator używa metody valueOf () do wewnętrznej konwersji prymitywów na odpowiadające im obiekty opakowujące (tj. Autoboxing), w odwrotnym przypadku używa intValue (), doubleValue () itp. Jak paradygmaty do rozpakowywania.
  • Dla odniesienia, mapowanie opakowania i prymitywów w Javie jest wspomniane poniżej -
Typ pierwotnyKlasa opakowania
booleanBoolean
bajtBajt
zwęglaćPostać
pływakPływak
intLiczba całkowita
długoDługo
krótkiKrótki
podwójniePodwójnie

Przykłady -

  • Weźmy teraz ArrayList of Integers, a następnie skorzystaj z koncepcji rozpakowywania -

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

  • Dlatego w powyższym przykładzie, podczas dodawania wartości do x, widzimy, że x wydaje się być prymitywne, więc rozpakowywanie odbywa się tutaj automatycznie, gdy to przypisanie jest wykonane.

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

  • Tuż powyżej pokazaliśmy przykład -2 w tym kontekście, w którym przedstawiono typowy scenariusz. Jeśli jesteś zaznajomiony z tworzeniem obiektów w java, możesz zobaczyć, że „liczba całkowita = 0”, deklaruje obiekt, a kiedy wykonujemy obliczenia w pętli for, możemy zobaczyć, że prymitywna wartość „i” jest dodawana do opakowania „ suma".
  • Stąd można stwierdzić, że najpierw nastąpi konwersja z opakowania do operacji podstawowej, ponieważ operator „+” działa tylko na operacjach podstawowych, a zatem najpierw nastąpi rozpakowanie obiektu, następnie nastąpi obliczenie, a następnie nastąpi ponowne autoboxowanie obiektu, a następnie wartość zostanie przypisany do zmiennej „sum”.
  • Stanowi to niepotrzebny narzut na maszynę JVM, ponieważ powstanie wiele pośrednich obiektów całkowitoliczbowych, które zostaną zniszczone (w celu późniejszego wyrzucenia elementów bezużytecznych), w związku z czym może wystąpić spowolnienie, dlatego logikę należy traktować ostrożnie.
  • Zobaczmy teraz warunki inne niż ogólne postrzeganie i będziemy mieć kod, w którym bardzo ważne jest zrozumienie autoboxowania i rozpakowywania -

Zastanów się nad fragmentem umieszczonym poniżej. Jak myślisz, jaki będzie jego wynik?

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

  • Jeśli mówisz „prawda”, to jesteś „fałszem”, ponieważ wynik jest również „fałszem”, to dlatego, że możemy porównać tylko zakres liczb całkowitych od -128 do 127 w ten sposób, dla wartości wykraczających poza ten zakres mają być rozpakowane.
  • Dlatego musimy porównać intValue () powyższych liczb całkowitych, na razie kompilator dokonuje tego za pomocą właściwości valueOf ().
  • Prawdopodobnie, jeśli mieści się w zakresie cytowanym powyżej, wówczas powyższy kod da prawdę, ponieważ najpierw odniesie się do puli literałów całkowitoliczbowych do porównania.

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

Spowoduje to oszacowanie na „prawdziwą” wartość, ponieważ 100 występuje w literalnej puli.

Autoboxing i Unboxing w Javie z przeciążeniem metod

  • Zanim otagujemy autoboxing i rozpakowanie do przeciążenia metody, zakłada się, że czytelnik zapoznał się z koncepcją przeciążenia metody, po prostu damy trochę wglądu i więcej, zapoznaj się z dokumentacją Oracle na ten sam temat.
  • Przeciążenie metody jest procesem, w którym ta sama nazwa metody jest używana z inną liczbą argumentów wejściowych, różne typy danych zmiennych o tych samych nazwach itp. Służą do przedstawienia wielu wariantów dowolnej metody obliczeniowej ogólnie.
  • Weźmy przykład dla tego samego, aby zrozumieć go głębiej, a także zaprezentujemy wyniki, które pojawiają się na zdjęciu tym razem -

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

Wynik -

drukowanie wartości nieopakowanej 5
wypisanie wartości autoboxed 5

Uwaga - powyższy program można uruchomić w dowolnym środowisku IDE, aby uzyskać wyżej umieszczone wyjście.

  • Stąd powyższe zachowanie wyraźnie mówi, że technika autoboxowania ma znaczące zastosowanie w koncepcjach przeciążania i powinna być używana ostrożnie podczas kodowania.

Zalety funkcji Autoboxing i Unboxing w Javie

  • Odpowiednia konwersja jest wykonywana automatycznie przez kompilator.
  • Deweloper powinien napisać mniejszy kod, a tym samym czystszy kod.
  • Nie ma potrzeby ręcznego wyrażania rzutów.

Wniosek

Widzieliśmy przypadek użycia autoboxowania i rozpakowywania, jak ukryta jest ta koncepcja i gdzie może ona tworzyć plusy i minusy. Należy go używać ostrożnie podczas kodowania, w przeciwnym razie może zsumować niepotrzebny narzut związany z konwersją obliczeniową, dlatego konwersje należy wykonywać w operacjach podstawowych, aby uniknąć nadmiernego gromadzenia śmieci i nadmiernego tworzenia obiektów tymczasowych. Widzieliśmy również przypadek użycia autoboxingu z koncepcją przeciążenia Java, możesz sprawdzić kilka innych ograniczeń wraz z tym.

Polecane artykuły

Jest to przewodnik po automatycznym okazywaniu i rozpakowywaniu w Javie. W tym miejscu omawiamy także Co to jest Autoboxing i Unboxing w java? jak to działa wewnętrznie z niektórymi przykładowymi kodami? Możesz także przejrzeć nasze inne sugerowane artykuły, aby dowiedzieć się więcej -

  1. Co to jest JDBC?
  2. Co to jest Generics w Javie?
  3. Groovy vs Java
  4. Co to jest dziedziczenie Java?
  5. Przykłady i jak działają generics w C #
  6. JRE vs JVM | 8 najważniejszych różnic z (Infografika)