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
- Typy prymitywne a opakowujące
- Autoboxing i unboxing
- Parsowanie i valueOf
- Pułapki autoboxingu