Как работает java auto boxing / unboxing?
Начиная с JDK 5.0, автоматический бокс / распаковка была введена в Java, уловка проста и полезна, но когда я начал тестировать различные преобразования между классами-обертками и примитивными типами, я действительно запутался, например, как работает концепция автоматического бокса в Java. :
Заниматься боксом
int intValue = 0;
Integer intObject = intValue;
byte byteValue = 0;
intObject = byteValue; // ==> Error
Попробовав разные случаи (short
, long
, float
, double
), единственный случай, который принимается компилятором, это когда тип значения справа от оператора аффектацииint
, Когда я посмотрел внутрь источникаInteger.class
я обнаружил, что он реализует только один конструктор сint
параметр.
Итак, мой вывод заключается в том, что концепция автоматического бокса основана на конструкторе, реализованном в классе-обертке. Я хочу знать, является ли этот вывод верным или есть другой концепт, используемый автобоксом?
Распаковка
Integer intObject = new Integer(0);
byte byteValue = intObject; // ==> Error (the same Error with short)
int intValue = intObject;
double doubleValue = intObject;
Мой вывод о распаковке состоит в том, что класс-оболочка дает значение, обернутое объектом в соответствующем типе (Integer
==>int
), то компилятор использует обычные правила преобразования примитивных типов (byte
=>short
=>int
=>long
=>float
=>double
). Я хочу знать, является ли этот вывод верным или есть другая концепция, используемая для автоматической распаковки?
Спасибо за продвижение :)