Преобразование примитивов в обёртки в Java — autoboxing с примерами
В Java для каждого примитивного типа существует класс-обёртка: int → Integer, double → Double, boolean → Boolean и так далее. Класс-обёртка позволяет работать с числом или логическим значением как с объектом — это нужно, например, для коллекций (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).