Sobes.tech
Junior

Co jsou to třídy obalů (Wrapper třídy) v Javě?

sobes.tech AI

Odpověď od AI

Třídy wrapper v Javě jsou třídy, které poskytují objektově orientované zobrazení primitivních datových typů. Umožňují používat primitivní hodnoty v kontextech, kde jsou požadovány objekty, například v kolekcích nebo při práci s více vlákny.

Hlavní třídy wrapper:

  • Byte
  • Short
  • Integer
  • Long
  • Float
  • Double
  • Boolean
  • Character

Příklady použití:

Použití primitivního typu:

// Primitivní typ
int x = 10;

Použití wrapper třídy:

// Wrapper třída
Integer y = new Integer(20); // Zastaralý způsob tvorby
Integer z = 30; // Autoboxing (automatická konverze primitivu na objekt)

Konverze mezi primitivy a wrapper objekty:

  • Autoboxing: Automatická konverze primitivu na wrapper objekt.
    // Autoboxing
    int primitiveInt = 100;
    Integer wrapperInt = primitiveInt;
    
  • Unboxing: Automatická konverze wrapper objektu na primitiv.
    // Unboxing
    Integer wrapperInteger = new Integer(200);
    int primitiveInteger = wrapperInteger;
    

Výhody wrapper tříd:

  • Práce s kolekcemi: Kolekce (List, Set, Map) ukládají pouze objekty.

  • Práce s null: Wrapper objekty mohou mít hodnotu null, na rozdíl od primitivů.

  • Poskytují užitečné metody: Wrapper třídy mají metody pro převod řetězců, porovnání hodnot atd. Například Integer.parseInt(String s).

  • Práce s generiky: Generiky fungují pouze s objekty. Nevýhody wrapper tříd:

  • Paměťová náročnost: Wrapper objekty zabírají více paměti než primitivní typy.

  • Snížení výkonu: Automatická konverze (autoboxing a unboxing) může mírně snížit výkon. Příklad použití v kolekci:

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)); // Explicitní vytvoření objektu

        int firstNum = numbers.get(0); // Unboxing
        System.out.println(firstNum);
    }
}