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 :)

questionAnswers(3)

yourAnswerToTheQuestion