Dúvida - Wrapper/Casting

Amigos, gostaria de perguntar se o wrapper é a mesma coisa que casting ou algo parecido, para converter os valores de uma variável primitiva.
Caso não seja, poderiam dar um exemplo para mostrar a diferença entre eles?

Desde já agradeço a atenção!

Atte.: L. Erlacher

Não é. Casting é quando você converte:
a) Um valor primitivo em outro primitivo (por exemplo, um double num int);
b) Uma referência de uma classe pai numa classe filha (por exemplo, um Object em uma String);

Caso a conversão não seja possível, o cast dará ClassCastException.

double x = 10.5; //Casting int y = (int) x;

Wrapper é uma classe que encapsula alguma estrutura. No caso, você está se referindo ao wrapper de tipo primitivo. De maneira geral, um Wrapper da classe Integer nada mais é do que uma classe assim:

[code]public final class Integer {
private int valor;
public Integer(int valor) {
this.valor = valor;
}

 public int intValue() {
      return valor;
 }

 public static Integer valueOf(int valor) {
     return new Integer(valor);
 }

}[/code]

É claro que a classe mesmo é um pouco mais complexa que isso (deriva de Number, tem mais métodos e gerencia um cache de valores comuns), mas com isso dá para ter uma idéia. Os wrappers foram criados para resolver o problema de que as collections eram de objetos. Portanto, é impossível armazenar um int, double ou qualquer outro valor primitivo num ArrayList ou num HashSet.

A solução encontrada foi óbvia:

  1. Cria-se uma classe que contém o valor primitivo dentro (wrapper);
  2. Coloca-se objetos dessa classe dentro da coleção;
ArrayList<Integer> lista = new ArrayList<Integer>();
int x = 10; 
Integer xComoObjeto = new Integer(x);
lista.add(xComoObjeto);

Para usar o dado, então, era necessário fazer:

int valor = lista.get(0).intValue();

A partir do Java 5, foi incluído um recurso chamado AutoBoxing e AutoUnboxing. Nada mais é do que colocar o compilador para adicionar todo o código extra para encapsular os tipos primitivos num wrapper e desencapsula-los automaticamente. Assim, é possível escrever:

Integer x = 10; int y = 5 + x;

Que o compilador automaticamente gera:

Integer x = Integer.valueOf(10); int y = 5 + x.intValue();

antes de compilar.

Antes do Java 5, éramos obrigados a deixar os wrappers explícitos, como no exemplo que postei acima. Era muito trabalho.

Vlw amigo…

Aqui vai uma dica pra você assistir. O video explica as classes wrapper: