Sobes.tech
Junior

Čo sú to wrapper triedy v Jave?

sobes.tech AI

Odpoveď od AI

Wrapper triedy v Jave sú triedy, ktoré poskytujú objektovo-orientované zobrazenie primitívnych dátových typov. Umožňujú používať primitívne hodnoty v kontextoch, kde sú potrebné objekty, napríklad v kolekciách alebo pri práci s viacvláknovým spracovaním.

Hlavné Wrapper triedy:

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

Príklady použitia:

Použitie primitívu:

// Primitívny typ
int x = 10;

Použitie Wrapper triedy:

// Wrapper trieda
Integer y = new Integer(20); // Zastaralý spôsob vytvárania
Integer z = 30; // Autoboxing (automatické prevedenie primitívu na objekt)

Prevod medzi primitívmi a Wrapper objektmi:

  • Autoboxing: Automatické prevedenie primitívu na Wrapper objekt.
    // Autoboxing
    int primitiveInt = 100;
    Integer wrapperInt = primitiveInt;
    
  • Unboxing: Automatické prevedenie Wrapper objektu na primitív.
    // Unboxing
    Integer wrapperInteger = new Integer(200);
    int primitiveInteger = wrapperInteger;
    

Výhody Wrapper tried:

  • Práca s kolekciami: Kolekcie (List, Set, Map) ukladajú iba objekty.
  • Práca s null: Wrapper objekty môžu mať hodnotu null, na rozdiel od primitívov.
  • Poskytovanie užitočných metód: Wrapper triedy majú metódy na prevod reťazcov, porovnávanie hodnôt a pod. Napríklad, Integer.parseInt(String s).
  • Práca s generikami: Generiká pracujú iba s objektmi.

Nevýhody Wrapper tried:

  • Spotreba pamäte: Wrapper objekty zaberajú viac pamäte ako primitívy.
  • Zníženie výkonu: Automatické prevedenie (autoboxing a unboxing) môže mierne znižovať výkon.

Príklad použitia v kolekcii:

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)); // Priame vytvorenie objektu

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