gRoOve:
Finalmente entendi o conceito do auto-boxing. Na verdade ele não converte então, o primitivo está lá, o wrapper só permite que eu lide com ele de forma que fosse um objeto, seria isso?
O Wrapper realmente guarda o valor primitivo, mas de alguma forma eu tenho que recuperar este valor, além disso, para "converter" o primitivo em objeto, o objeto deve ser criado, concorda? Para isso existem métodos específicos, e o trabalho do auto-boxing é chamar estes métodos implicitamente, assim o programador escreve menos código.
Por exemplo, para obter um objeto Integer a partir de um int explicitamente, deveríamos fazer assim:
Integer i = Integer.valueOf(10); // Este método retorna um objeto do tipo Integer que representa o valor 10
O compilador permite que a atribuição seja feita diretamente, neste caso, ocorre o auto-boxing:
Integer i = 10; // Escrevi este código no meu programa
. . .
Integer i = Integer.valueOf(10); // Mas este é o código que será executado implicitamente
O processo de auto-unboxing ocorre de forma parecida:
Integer wrapper = 10; // Tenho uma variável com a referência de um Wrapper
int primitive = wrapper; // Escrevi este código no meu programa
. . .
int primitive = wrapper.intValue(); // Mas este é o código que será executado implicitamente