Преобразование примитивов в обёртки в Java — autoboxing с примерами

В Java для каждого примитивного типа существует класс-обёртка: intInteger, doubleDouble, booleanBoolean и так далее. Класс-обёртка позволяет работать с числом или логическим значением как с объектом — это нужно, например, для коллекций (ArrayList, HashMap), которые не умеют хранить примитивы.

Пример 1: примитивы в объекты-обёртки

Через статические методы valueOf() соответствующих классов оборачиваем примитивы в объекты.

class Main {
  public static void main(String[] args) {

    // create primitive types
    int var1 = 5;
    double var2 = 5.65;
    boolean var3 = true;

    //converts into wrapper objects
    Integer obj1 = Integer.valueOf(var1);
    Double obj2 = Double.valueOf(var2);
    Boolean obj3 = Boolean.valueOf(var3);

    // checks if obj are objects of
    // corresponding wrapper class
    if(obj1 instanceof Integer) {
      System.out.println("An object of Integer is created.");
    }

    if(obj2 instanceof Double) {
      System.out.println("An object of Double is created.");
    }

    if(obj3 instanceof Boolean) {
      System.out.println("An object of Boolean is created");
    }
  }
}

Вывод:

An object of Integer is created.
An object of Double is created.
An object of Boolean is created.

Метод valueOf() у классов-обёрток (Integer, Double, Boolean) принимает примитив и возвращает соответствующий объект. Оператор instanceof проверяет, является ли переменная экземпляром указанного класса.

Пример 2: объекты-обёртки в примитивы

Обратное преобразование выполняется методами intValue(), doubleValue(), booleanValue().

class Main {
  public static void main(String[] args) {

    // creates objects of wrapper class
    Integer obj1 = Integer.valueOf(23);
    Double obj2 = Double.valueOf(5.55);
    Boolean obj3 = Boolean.valueOf(true);

    // converts into primitive types
    int var1 = obj1.intValue();
    double var2 = obj2.doubleValue();
    boolean var3 = obj3.booleanValue();

    // print the primitive values
    System.out.println("The value of int variable: " + var1);
    System.out.println("The value of double variable: " + var2);
    System.out.println("The value of boolean variable: " + var3);
  }
}

Вывод:

The value of int variable: 23
The value of double variable: 5.55
The value of boolean variable: true

У каждого класса-обёртки есть свой метод-распаковщик: intValue() у Integer, doubleValue() у Double, booleanValue() у Boolean. Они достают примитив из объекта.

Примечание

Java умеет делать преобразование примитива в объект и обратно автоматически — это называется autoboxing (упаковка) и unboxing (распаковка). Например, можно написать просто Integer obj = 5; — компилятор сам вызовет Integer.valueOf(5).