Классы обертки в Java

С классами обертками мы уже неявно познакомились, когда изучали коллекции. У многих мог возникнуть вопрос: зачем задавать целочисленную переменную не int, а Integer. Все дело в том, что коллекции это набор объектов и для того, чтобы оперировать примитивными типами как объектами и были придуманы классы обертки.

Стоить уточнить, что в данной статье будут рассмотрены только классы обертки для примитивных типов данных.

Данные классы имеют название от примитивного типа данных, который они представляют: DoubleFloatLongIntegerShortByteCharacter, Boolean. 

auboxoxing

Данные классы очень напоминают класс String. Объект обертку для примитивного типа можно создать как явно (используя конструктор), так и не явно (прямым присвоением примитива классу обертке) с помощью оператора”=” либо при передаче примитива в параметры метода (типа “класса-обертки”). Последнее еще называют автоупакова (autoboxing).

Код   
package com.javamaster;

public class AutoBoxingExample {
   
    public static void main(String[] args){
        Integer a = new Integer(5);//явное создание переменной обертки
       
        int b = a;//неявное создание... 
    }
}

Как и все объекты, переменные созданы с помощью классов оберток будут храниться в куче (heap). НО, есть одно важное замечание, о котором часто любят спрашивать в тестах или собеседованиях. Оно касается целочисленных классов оберток. Неявное создание таких переменных со значением в диапазоне -128 +127 будут храниться в пуле о котором мы говорили в статье о String. Потому такие обертки с одинаковыми значениями будут являться ссылками на один объект.

Классы обертки

Автоупаковка переменных примитивных типов требует точного соответствия типа исходного примитива – типу “класса-обертки”. Попытка автоупаковать переменную типа byte в Short, без предварительного явного приведения byte->short вызовет ошибку компиляции. О приведении типов мы уже писали.

Код   
package com.javamaster;

public class AutoBoxingExample {
   
    public static void main(String[] args){
        Integer a = new Integer(5);
        Integer b = new Integer(5);
        b = new Integer(3);
       
        System.out.println("a = "+a);
       
        Integer c = new Integer(444);
        Integer d = new Integer(444);
        d = new Integer(456);
   
        System.out.println("d = "+d);
   
    }

}

Результат работы программы:

a = 5
d = 456

Классы обертки удобны еще тем, что они предоставляют методы для работы с соответственными типами данных.

Давайте посмотрим на самые популярные:

Код   
package com.javamaster;

public class AutoBoxingExample {
   
    public static void main(String[] args){
        String a = "45";
        double b = Double.parseDouble(a);//пожалуй, самый популярный метод перевод из строки в целочисленный или дробный тип
        int c = Integer.parseInt(a);
        System.out.println(b);
        System.out.println(c);
       
       
        System.out.println(Integer.MAX_VALUE);//константа максимального значения
       
        System.out.println(Integer.bitCount(78));// в двоичном виде
       
        System.out.println(Float.valueOf("80"));//возвращает целочисленный объект, содержащий значение указанного типа
       
        System.out.println(Integer.valueOf("444",16)); //возвращает целочисленный объект, содержащий целое значение указанного строкового представления,
        //разобранного со значением системы счисления
    }

}

Хотелось бы еще рассмотреть создание Boolean переменной. Этот вопрос встречается достаточно часто в тестах:

Код   
package com.javamaster;

public class BooleanExample {
   
    public static void main(String[] args){
        Boolean b1 = new Boolean(false);//false
        Boolean b2 = new Boolean("false");//false
        Boolean b3 = new Boolean(true);//true
        Boolean b4 = new Boolean("true");//true
        Boolean b5 = new Boolean("hi there");//false

    }

}

На самом деле методов очень много, но это самые популярные и самые используемые для меня.

Вот и все, что касается классов оберток для примитивных типов данных. Теперь Вы сможете оперировать примитивными типами, как объектами.

1 thought on “Классы обертки в Java”

  1. По поводу автообертки булиан переменых очень часто встречал на тестах, но на собеседованиях почему-то ни разу не спрашивали)

Leave a Comment

Your email address will not be published.