Поскольку 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
).
Я хочу знать, верен ли этот вывод или существует другая концепция, используемая автоматической распаковкой?
Спасибо за продвижение:)