CodeGym/Blog Java/Random-PL/Autoboxing i unboxing w Javie
John Squirrels
Poziom 41
San Francisco

Autoboxing i unboxing w Javie

Opublikowano w grupie Random-PL
W Javie funkcją prymitywów i ich opakowań jest automatyczne pakowanie/rozpakowywanie. Zagłębmy się w tę koncepcję. Jak już się dowiedzieliśmy, Java jest językiem obiektowym. Oznacza to, że wszystkie programy napisane w Javie składają się z obiektów. Prymitywy nie są obiektami. Ale mimo to zmiennej opakowania można przypisać wartość pierwotną. Proces ten nazywa się autoboxingiem. Podobnie do zmiennej pierwotnej można przypisać obiekt opakowania. Ten proces nazywa się unboxingiem. Na przykład:
public class Main {
   public static void main(String[] args) {
       int x = 7;
       Integer y = 111;
       x = y; // Unboxing
       y = x * 123; // Autoboxing
   }
}
W linii 5 przypisujemy y, które jest obiektem typu Integer , do pierwotnego x . Jak widać, nie musimy podejmować żadnych dodatkowych kroków: kompilator wie, że int i Integer to w zasadzie to samo. To jest unboxing. Coś podobnego dzieje się z autoboxingiem w linii 6: wartość pierwotną (x * 123) można łatwo przypisać do obiektu y . To jest przykład autoboxingu. Dlatego też termin ten zawiera słowo „auto”: ponieważ nie trzeba robić nic specjalnego, aby przypisać prymitywy do odpowiednich obiektów opakowania (i odwrotnie). Wszystko dzieje się automatycznie. Wygodne, co? :) Widzimy kolejny przykład wygody autoboxingu/unboxingu podczas pracy z metodami. Dzieje się tak, ponieważ argumenty metod są również automatycznie pakowane i rozpakowywane. Na przykład, jeśli metoda przyjmuje jako dane wejściowe dwa obiekty Integer , możemy zamiast tego łatwo przekazać zwykłe int !
public class Main {
   public static void main(String[] args) {

       printNumber(7);// A standard int, not even an int variable
   }

   public static void printNumber(Integer i) {
       System.out.println("You entered the number " + i);
   }
}
Wyjście:
You entered the number 7
Działa to także w drugą stronę:
public class Main {
   public static void main(String[] args) {

       printNumber(new Integer(632));
   }

   public static void printNumber(int i) {
       System.out.println("You entered the number " + i);
   }
}
Ważną kwestią, o której musisz pamiętać jest to, że autoboxing i unboxing nie działają w przypadku tablic!
public class Main {
   public static void main(String[] args) {

       int[] i = {1,2,3,4,5};

       printArray(i);// Error, this won't compile!
   }

   public static void printArray(Integer[] arr) {
       System.out.println(Arrays.toString(arr));
   }
}
Próba przekazania tablicy elementów podstawowych do metody pobierającej tablicę obiektów zakończy się błędem kompilacji. Podsumowując, jeszcze raz krótko porównajmy prymitywy i opakowania.

Elementy pierwotne:

  • Mają zalety wydajności
Owijarki:
  • Pozwólcie nam nie naruszać zasady „wszystko jest obiektem”, co oznacza, że ​​liczby, znaki i wartości logiczne nie naruszają tej koncepcji
  • Rozszerz możliwości pracy z tymi wartościami, udostępniając wygodne metody i pola
  • Są niezbędne, gdy metoda działa tylko z obiektami
Aby utrwalić zdobytą wiedzę, sugerujemy obejrzenie lekcji wideo z naszego kursu Java
Komentarze
  • Popularne
  • Najnowsze
  • Najstarsze
Musisz się zalogować, aby dodać komentarz
Ta strona nie ma jeszcze żadnych komentarzy