0Pricing
Java Academy · Lekcja

Typy prymitywne a opakowujące

Integer, Double, Boolean i inne

Typy prymitywne a opakowujące to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 1 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.

Dwa światy wartości

Java ma typy proste, takie jak int, double i boolean, które przechowują bezpośrednio surowe wartości. Ma również klasy opakowujące, takie jak Integer, Double i Boolean, które umieszczają te wartości wewnątrz obiektów.

Typy proste są szybkie i lekkie. Klasy opakowujące są pełnoprawnymi obiektami, które mogą znajdować się w kolekcjach i mogą mieć wartość null.

Osiem typów prostych

Java definiuje dokładnie osiem typów prostych:

  • byte, short, int, long dla liczb całkowitych
  • float, double dla liczb dziesiętnych
  • char dla pojedynczego znaku
  • boolean dla wartości prawda/fałsz

Każdy z nich ma odpowiadającą mu klasę opakowującą w pakiecie java.lang.

Odpowiadające nazwy klas opakowujących

W większości przypadków nazwę klasy opakowującej tworzy się przez zapisanie nazwy typu prostego z wielką literą na początku, ale dwa przypadki są inne:

  • int staje się klasą Integer
  • char staje się klasą Character
  • boolean staje się klasą Boolean, double staje się klasą Double itd.

Wypiszmy kilka klas opakowujących.

public class Main {
    public static void main(String[] args) {
        Integer count = 42;
        Double price = 9.99;
        Boolean active = true;
        Character grade = 'A';
        System.out.println(count);
        System.out.println(price);
        System.out.println(active);
        System.out.println(grade);
    }
}

Klasy opakowujące są obiektami

Typ prosty przechowuje wartość. Klasa opakowująca jest referencją do obiektu, więc może nie wskazywać na nic i mieć wartość null.

Dzięki temu klasy opakowujące są przydatne, gdy wartość może być nieobecna, na przykład w przypadku kolumny bazy danych, która dopuszcza wartość NULL.

public class Main {
    public static void main(String[] args) {
        Integer missing = null;
        int present = 5;
        System.out.println(missing);
        System.out.println(present);
    }
}

Przydatne stałe

Klasy opakowujące udostępniają przydatne stałe. Integer.MAX_VALUE i Integer.MIN_VALUE oznaczają odpowiednio największą i najmniejszą wartość typu int.

To znacznie łatwiejsze niż samodzielne zapamiętywanie tych liczb.

public class Main {
    public static void main(String[] args) {
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Long.MAX_VALUE);
    }
}

Metody pomocnicze

Klasy opakowujące są również zbiorami statycznych metod pomocniczych. Na przykład Integer.toBinaryString przedstawia liczbę w systemie dwójkowym, a Integer.max zwraca większą z dwóch wartości.

public class Main {
    public static void main(String[] args) {
        System.out.println(Integer.toBinaryString(10));
        System.out.println(Integer.max(7, 3));
        System.out.println(Integer.toHexString(255));
    }
}

Dlaczego kolekcje potrzebują klas opakowujących

Generyki w Javie działają wyłącznie z obiektami, a nie z typami prostymi. Nie można zapisać List<int>.

Zamiast tego należy użyć List<Integer>. Klasa opakowująca pozwala umieścić wartość typu prostego w świecie obiektów wymaganym przez kolekcje.

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

public class Main {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(10);
        numbers.add(20);
        System.out.println(numbers);
    }
}

Porównywanie wartości klas opakowujących

Aby porównać wartość liczbową znajdującą się w dwóch klasach opakowujących, proszę użyć .equals() lub .compareTo(), a nie operatorów arytmetycznych bezpośrednio na tych obiektach.

compareTo zwraca liczbę ujemną, zero albo liczbę dodatnią.

public class Main {
    public static void main(String[] args) {
        Integer a = 100;
        Integer b = 200;
        System.out.println(a.equals(b));
        System.out.println(a.compareTo(b));
    }
}

Pamięć i wydajność

Typy proste zużywają mniej pamięci i działają szybciej, ponieważ nie mają narzutu związanego z obiektem. Pojedynczy int to zaledwie 4 bajty surowych danych.

Obiekt klasy opakowującej zawiera dodatkowe informacje w nagłówku. W przypadku ciasnych pętli przetwarzających miliony wartości proszę wybierać typy proste.

Różne wartości domyślne

Niezainicjalizowane pole typu prostego otrzymuje domyślnie wartość podobną do zera: int ma wartość 0, a boolean ma wartość false.

Niezainicjalizowane pole typu opakowującego otrzymuje domyślnie wartość null. Ta różnica ma znaczenie, gdy później próbują Państwo użyć tej wartości.

public class Main {
    static int primitiveField;
    static Integer wrapperField;

    public static void main(String[] args) {
        System.out.println(primitiveField);
        System.out.println(wrapperField);
    }
}

Wybór między nimi

Prosta zasada: ze względu na wydajność i czytelność należy domyślnie używać typów prostych. Na klasę opakowującą proszę przechodzić, gdy potrzebny jest element kolekcji, typ generyczny albo możliwość oznaczenia braku wartości za pomocą null.

Szybkie sprawdzenie

Proszę sprawdzić swoją wiedzę o typach prostych i klasach opakowujących.

Podsumowanie

Poznali Państwo różnicę między typami prostymi a klasami opakowującymi:

  • Osiem typów prostych odpowiada ośmiu klasom opakowującym, takim jak Integer i Double
  • Klasy opakowujące są obiektami, mogą mieć wartość null i pasują do kolekcji
  • Typy proste są szybsze i lżejsze, dlatego należy używać ich domyślnie
  • Klasy opakowujące udostępniają również przydatne stałe i metody pomocnicze

Często zadawane pytania

Czy lekcja „Typy prymitywne a opakowujące” jest bezpłatna?

Tak — pełny tekst „Typy prymitywne a opakowujące” 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 „Typy prymitywne a opakowujące”?

Integer, Double, Boolean i inne Ć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 1 z 4.

Ile czasu zajmuje lekcja „Typy prymitywne a opakowujące”?

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