Sobes.tech
Junior

Какво са обвиващите класове (Wrapper класове) в Java?

sobes.tech AI

Отговор от AI

Класовете wrapper в Java са класове, които предоставят обектно-ориентирано представяне на примитивните типове данни. Те позволяват използването на примитивни стойности в контексти, където са необходими обекти, например в колекции или при работа с многопоточност.

Основни класове wrapper:

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

Примери за използване:

Използване на примитив:

// Примитивен тип
int x = 10;

Използване на клас wrapper:

// Клас wrapper
Integer y = new Integer(20); // Стар начин за създаване
Integer z = 30; // Autoboxing (автоматично преобразуване на примитив в обект)

Преобразуване между примитиви и обекти wrapper:

  • Autoboxing: Автоматично преобразуване на примитив в обект wrapper.
    // Autoboxing
    int primitiveInt = 100;
    Integer wrapperInt = primitiveInt;
    
  • Unboxing: Автоматично преобразуване на обект wrapper в примитив.
    // Unboxing
    Integer wrapperInteger = new Integer(200);
    int primitiveInteger = wrapperInteger;
    

Предимства на класовете wrapper:

  • Работа с колекции: Колекциите (List, Set, Map) съхраняват само обекти.

  • Работа с null: Обектите wrapper могат да имат стойност null, за разлика от примитивите.

  • Предоставят полезни методи: Класовете wrapper имат методи за преобразуване на низове, сравняване на стойности и др. Например, Integer.parseInt(String s).

  • Работа с генерики: Генериците работят само с обекти. Недостатъци на класовете wrapper:

  • Потребление на памет: Обектите wrapper заемат повече памет от примитивите.

  • Намаляване на производителността: Автоматичните преобразувания (autoboxing и unboxing) могат леко да намалят производителността. Пример за използване в колекция:

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)); // Явно създаване на обект

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