Jaba:
Boa Tarde Pessoal, Fmz?
Bom, procurei aqui no forum e não encontrei nenhum tópico que realmente discutisse isso de verdade, então:
Qual é a real diferença entre Wrappers e AutoBoxing/Unboxing?
Me desculpem a ignorância se eu estiver errado, mas, no contexto que me foi explicado, pareceu a mesma coisa!
Wrapper é uma designação genérica para todo o objeto que encapsula outro. Em particular é uma designação para
as classes do java que encapsulam os tipos primitivos ou seja (Integer, Double, Character, Short, etc…)
O Integer por exemplo é um objeto que contém um int lá dentro. O Integer atua como uma caixa ( box) para o int lá dentro.
Se vc quiser criar uma lista de int vc não consegue porque List só permite conter objetos e int não é um objeto. Então os wrappers servem para usar os primitivos como objetos sempre que isso é necessário ( como colocar numa lista , por exemplo).
Mas para ler o valor vc precisa invocar intValue() no Integer para que o int seja retornado.
Antigamente vc escrevia isto:
List lista = new ArrayList();
lista.add(new Integer(2)); // encaixota o 2 no wrapper para usa como objeto
Integer integer = (Integer)lista.get(0);
int dois = integer.intValue(); // des-encaixota o 2 de dentro do wrapper para usar como primitivo.
O Java 1.5 trouxe o conceito de Tipo Genérico e com ele o conceito de Auto-boxing (auto-encaixotamento)
e a operação inversa ( Auto-unboxing, auto-desencaixotamento).
List<Integer> lista = new ArrayList<Integer>();
lista.add(2); // encaixota o 2 no wrapper _automaticamente_ para usa como objeto
int dois = lista.get(0); // des-encaixota o 2 de dentro do wrapper _automaticamente_ para usar como primitivo.
Veja como o código é bastante simplificado.