0Pricing
Java Academy · Lekcja

Autoboxing i unboxing

Zasady automatycznej konwersji

Autoboxing i unboxing to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 4 lekcji w sumie.

Automatyczna konwersja

Autoboxing polega na automatycznej konwersji typu prostego na obiekt jego klasy opakowującej. Unboxing to operacja odwrotna, czyli konwersja klasy opakowującej z powrotem na typ prosty.

Dzieje się to bezpośrednio, dzięki czemu można łączyć oba światy bez ręcznego wywoływania metod konwersji.

Autoboxing w praktyce

Przypisanie wartości typu int do zmiennej typu Integer uruchamia autoboxing. Kompilator sam wstawia wywołanie Integer.valueOf.

public class Main {
    public static void main(String[] args) {
        int primitive = 42;
        Integer boxed = primitive;
        System.out.println(boxed);
    }
}

Unboxing w praktyce

Przypisanie wartości typu Integer do zmiennej typu int uruchamia unboxing. Kompilator w tle wstawia wywołanie intValue.

public class Main {
    public static void main(String[] args) {
        Integer boxed = 99;
        int primitive = boxed;
        System.out.println(primitive);
    }
}

Autoboxing w kolekcjach

Najczęściej autoboxing można zaobserwować podczas dodawania typów prostych do kolekcji. Zapisują Państwo list.add(5), a Java automatycznie opakowuje wartość 5 w obiekt typu Integer.

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> nums = new ArrayList<>();
        nums.add(1);
        nums.add(2);
        int first = nums.get(0);
        System.out.println(first);
    }
}

Operacje arytmetyczne wykonują unboxing

Gdy używają Państwo operatorów arytmetycznych na obiektach klas opakowujących, Java najpierw rozpakowuje je do typów prostych, wykonuje obliczenia, a następnie może ponownie opakować wynik.

Poniżej dwie wartości typu Integer są dodawane po rozpakowaniu obu z nich.

public class Main {
    public static void main(String[] args) {
        Integer a = 10;
        Integer b = 32;
        int sum = a + b;
        System.out.println(sum);
    }
}

Łączenie typów prostych i klas opakowujących

Można swobodnie łączyć typ prosty i klasę opakowującą w jednym wyrażeniu. Java rozpakowuje klasę opakowującą, dzięki czemu podczas obliczeń obie strony mają typy proste.

public class Main {
    public static void main(String[] args) {
        Integer wrapped = 7;
        int raw = 3;
        int product = wrapped * raw;
        System.out.println(product);
    }
}

Autoboxing w wywołaniach metod

Autoboxing dotyczy również argumentów metod. Metoda oczekująca obiektu typu Object lub klasy opakowującej może otrzymać typ prosty, a Java opakuje go podczas przekazywania.

public class Main {
    static void show(Object value) {
        System.out.println("Got: " + value);
    }

    public static void main(String[] args) {
        show(123);
        show(true);
    }
}

Ukryty koszt

Autoboxing jest wygodny, ale nie jest bezpłatny. Każde opakowanie tworzy obiekt, a ciasne pętle mogą tworzyć miliony krótkotrwałych obiektów.

W krytycznych pod względem wydajności pętlach numerycznych proszę pracować bezpośrednio z typami prostymi, a nie z klasami opakowującymi.

public class Main {
    public static void main(String[] args) {
        long total = 0;
        for (int i = 0; i < 5; i++) {
            total += i;
        }
        System.out.println(total);
    }
}

valueOf a new

Autoboxing korzysta z Integer.valueOf, które buforuje małe wartości z zakresu od -128 do 127. Wywołanie new Integer(...) zawsze tworzy nowy obiekt i jest obecnie przestarzałe.

Proszę pozwolić, aby autoboxing wykonywał swoje zadanie.

public class Main {
    public static void main(String[] args) {
        Integer cached = Integer.valueOf(50);
        System.out.println(cached);
    }
}

Wyrażenie trójargumentowe a autoboxing

Istnieje subtelna zasada: w wyrażeniu trójargumentowym, jeśli jedna gałąź ma typ prosty, a druga jest klasą opakowującą, Java może rozpakować obie do wspólnego typu prostego.

Zwykle jest to bezpieczne, ale należy pamiętać, że może uruchomić konwersje, których Państwo nie oczekiwali.

public class Main {
    public static void main(String[] args) {
        boolean flag = true;
        Integer result = flag ? 1 : 2;
        System.out.println(result);
    }
}

Kiedy to pomaga

Autoboxing służy temu, aby kod był czytelniejszy podczas łączenia typów prostych z generykami i kolekcjami. Stosowany rozsądnie usuwa zbędny kod. Używany bez rozwagi w intensywnie wykonywanych pętlach pogarsza wydajność.

Szybkie sprawdzenie

Proszę sprawdzić znajomość zasad autoboxingu.

Podsumowanie

Poznali Państwo zasadę działania autoboxingu i unboxingu:

  • Autoboxing konwertuje typ prosty na klasę opakowującą za pomocą valueOf
  • Unboxing konwertuje klasę opakowującą z powrotem na typ prosty za pomocą metod takich jak intValue
  • Dzieje się to podczas przypisań, pracy z kolekcjami, operacji arytmetycznych i wywołań metod
  • Jest to wygodne, ale tworzy obiekty, dlatego należy unikać tego w intensywnie wykonywanych pętlach

Często zadawane pytania

Czy lekcja „Autoboxing i unboxing” jest bezpłatna?

Tak — pełny tekst „Autoboxing i unboxing” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Autoboxing i unboxing”?

Zasady automatycznej konwersji Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Java Academy?

Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Autoboxing i unboxing”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?

Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Typy prymitywne a opakowujące
  2. Autoboxing i unboxing
  3. Parsowanie i valueOf
  4. Pułapki autoboxingu
← Powrót do Java Academy