Czym jest autoboxing oraz unboxing w Javie?

W Javie możemy korzystać z następujących prymitywnych typów danych:

  • int;
  • float;
  • double;
  • boolean;
  • char;
  • short;
  • byte;
  • long;

Każdy z tych typów ma swój odpowiednik, który jest obiektem – są to tak zwane typy osłonowe. Klasa Integer jest typem osłonowym dla int, Double dla double, Boolean dla boolean itd.

Każdy z prymitów możemy bez problemu przypisać do typu osłonowego – pomimo tego, że przypisujemy liczbę do instancji obiektu. Takie zjawisko można zauważyć np.:

public class Main {
    public static void main(String[] args) {
        Integer number = 1;
        Float f = 1.4f;
        Boolean t = true;
    }
}

Powyższe zjawisko nazywamy autoboxing, czyli Java automatycznie opakowuje liczbę prymitywną w typ osłonowy.

Poniżej możemy zauważyć odwrotne zjawisko – czyli przypisanie typu osłonowego do prymitywnego:

public class Main {
    public static void main(String[] args) {
        Integer number = 1;
        Float f = 1.4f;
        Boolean t = true;

        int x = number;
        float a = Float.valueOf(1.5);
    }
}

Powyższe zjawisko nazywamy unboxing – czyli Java automatycznie wyciąga wartość z typu osłonowego oraz przypisuję ją do typu prymitywnego.

Czy powinniśmy korzystać z automatycznej konwersja typów prymitywnych do osłonowych i vice-versa?

W skrócie – tak, jednak nie powinniśmy robić tego w zbyt dużej ilości, ponieważ operacja autoboxingu i unboxingu może spowolnić działanie aplikacji.

Wykorzystanie typów osłonowych może powodować również wiele innych problemów, jednak to już temat na inne pytanie.

Podsumowując używaj typów osłonowych tylko w przypadku, gdy jest to konieczne.

Kamil Klimek

Od 2016 jestem programistą Java. Przez pierwsze 4 lata pracowałem jako Full Stack Java Developer. Później postanowiłem postawić nacisk na Javę, żeby jeszcze lepiej ją poznać.

Subscribe
Powiadom o
guest
1 Komentarz
najstarszy
najnowszy oceniany
Inline Feedbacks
View all comments
Kasia
Kasia
2 lat temu

Krótko i na temat 🙂 Blog wygląda ciekawie, na pewno przejrzę więcej artykułów.

1
0
Would love your thoughts, please comment.x