Java 8 автоупаковка и распаковка

Цикл статей «Учебник Java 8».

Следующая статья — «Java 8 ещё раз о перегрузке методов».
Предыдущая статья — «Java 8 строки».

Автоупаковка (autoboxing) — это автоматическая конвертация из примитивных типов в соответствующий этому типу класс-обёртку, вставляемая компилятором Java, например из float во Float , из int в Integer.

Примера автоупаковки:

Компилятор Java применяет автоупаковку в следующих случаях:

  • При передаче примитивного типа в параметр метода, ожидающего соответствующий ему класс-обёртку.
  • При присвоении значения примитивного типа переменной соответствующего класса-обёртки.

Распаковка (unboxing) — конвертация класса-обёртки в соответствующий ему примитивный тип. В процессе распаковки может произойти исключение java.lang.NullPointerException , если значение переменной равно null.

Компилятор Java автоматически применяет распаковку в следующих случаях:

  • При передаче объекта класса-обёртки в метод, ожидающий соответствующий примитивный тип.
  • При присвоении экземпляра класса-обёртки переменной соответствующего примитивного типа.
  • В выражениях, в которых один или оба аргумента являются экземплярами классов-обёрток (кроме операции == и != ).

Примеры:

 

Соответствие примитивных типов и классов-обёрток
Примитивный тип Класс-обёртка Упаковка Распаковка
boolean Boolean Boolean.valueOf(booleanValue) booleanObject.booleanValue()
byte Byte Byte.valueOf(byteValue) byteObject.byteValue()
char Character Character.valueOf(charValue) characterObject.charValue()
float Float Float.valueOf(floatValue) floatObject.floatValue()
int Integer Integer.valueOf(integerValue) integerObject.integerValue()
long Long Long.valueOf(longValue) longObject.longValue()
short Short Short.valueOf(shortValue) shortObject.shortValue()
double Double Double.valueOf(doubleValue) doubleObject.doubleValue()

Если оба операнда являются классами-обёртками, то для операций сравнения < , > , <= , >=  компилятор автоматически вставляет распаковку, но в случае операций ==  и  !=  происходит сравнение ссылок объектов.

 

Цикл статей «Учебник Java 8».

Следующая статья — «Java 8 ещё раз о перегрузке методов».
Предыдущая статья — «Java 8 строки».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *