Como o java auto boxing / unboxing funciona?
Desde o JDK 5.0, o boxing automático / unboxing foi introduzido em java, o truque é simples e útil, mas quando comecei a testar conversões diferentes entre classes de wrapper e tipos primitivos, fico realmente confuso sobre como o conceito de boxing automático funciona em java, por exemplo :
Boxe
int intValue = 0;
Integer intObject = intValue;
byte byteValue = 0;
intObject = byteValue; // ==> Error
Depois de tentar casos diferentes (short
, long
, float
, double
), o único caso aceito pelo compilador é quando o tipo do valor à direita do operador de afetação éint
. Quando eu olhei dentro da fonte deInteger.class
descobri que ele implementa apenas um construtor comint
parâmetro.
Portanto, minha conclusão é que o conceito de boxe automático é baseado no construtor implementado na classe wrapper. Quero saber se essa conclusão é verdadeira ou se existe outro conceito usado pelo boxe automático?
Desembalagem
Integer intObject = new Integer(0);
byte byteValue = intObject; // ==> Error (the same Error with short)
int intValue = intObject;
double doubleValue = intObject;
Minha conclusão sobre unboxing é que a classe wrapper fornece o valor agrupado pelo objeto no tipo correspondente (Integer
==>int
), o compilador usa as regras usuais de conversão de tipos primitivos (byte
=>short
=>int
=>long
=>float
=>double
) Quero saber se essa conclusão é verdadeira ou se existe outro conceito usado pelo unboxing automático?
Obrigado pelo avanço :)