Junior
Czym są klasy opakowujące (Wrapper classes) w Java?
sobes.tech AI
Odpowiedź od AI
Klasy opakowujące w Javie to klasy, które zapewniają obiektową reprezentację typów danych prymitywnych. Umożliwiają one używanie wartości prymitywnych w kontekstach, gdzie wymagane są obiekty, na przykład w kolekcjach lub podczas pracy z wielowątkowością.
Główne klasy opakowujące:
ByteShortIntegerLongFloatDoubleBooleanCharacter
Przykłady użycia:
Użycie typu prymitywnego:
// Typ prymitywny
int x = 10;
Użycie klasy opakowującej:
// Klasa opakowująca
Integer y = new Integer(20); // Przestarzały sposób tworzenia
Integer z = 30; // Autoboxing (automatyczne przekształcenie prymitywu w obiekt)
Konwersja między prymitywami a obiektami opakowującymi:
- Autoboxing: Automatyczne przekształcenie prymitywu w obiekt opakowujący.
// Autoboxing int primitiveInt = 100; Integer wrapperInt = primitiveInt; - Unboxing: Automatyczne przekształcenie obiektu opakowującego w prymityw.
// Unboxing Integer wrapperInteger = new Integer(200); int primitiveInteger = wrapperInteger;
Zalety klas opakowujących:
- Praca z kolekcjami: Kolekcje (
List,Set,Map) przechowują tylko obiekty. - Praca z
null: Obiekty opakowujące mogą mieć wartośćnull, w przeciwieństwie do prymitywów. - Udostępniają przydatne metody: Klasy opakowujące mają metody do konwersji łańcuchów, porównywania wartości itp. Na przykład
Integer.parseInt(String s). - Praca z generykami: Generyki działają tylko z obiektami.
Wady klas opakowujących:
- Zużycie pamięci: Obiekty opakowujące zajmują więcej pamięci niż prymitywy.
- Spadek wydajności: Automatyczne przekształcanie (autoboxing i unboxing) może nieznacznie obniżyć wydajność.
Przykład użycia w kolekcji:
import java.util.ArrayList;
import java.util.List;
public class WrapperExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(10); // Autoboxing
numbers.add(new Integer(20)); // Jawne tworzenie obiektu
int firstNum = numbers.get(0); // Unboxing
System.out.println(firstNum);
}
}