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:
- Cria-se uma classe que contém o valor primitivo dentro (wrapper);
- 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.