Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

wrapper x wrapper

qual a diferença em fazer um cast e um Wrapper?

int j =4; String teste="123";

Integer i = new Integer(teste); Integer b = (Integer) j;

2 respostas
solução!

Fala Dayson, tudo bem ?

A ideia de um Wrapper em si é simplesmente servir como um embrulho (como o próprio nome diz - wrap) principalmente para os tipos primitivos - mas não somente eles.

Por meio deles é possível, por exemplo, guardar um valor de um determinado tipo primitivo em um tipo referência equivalente.

int i = 4;
Integer j = new Integer(i);

Aqui temos o mesmo valor inteiro acessível das duas formas . A principal diferença fica por conta da forma como a linguagem vai armazenar as informações. O primitivo tem seus bytes armazenados diretamente na área de variáveis sendo acessível diretamente, já no outro caso é criado um objeto na memória de objetos (Heap) - que é gerenciada pelo coletor de lixo - sendo acessível por meio de uma referência armazenada na área de variáveis.

Como o Wrapper em si é uma classe, podemos contar com uma série de recursos adicionais, como construtores que possibilitam criar inteiros recebendo dados em outros formatos, como texto, por exemplo - Integer x = new Integer("5");

O processo de cast não tem nenhuma relação com os Wrappers. Ele serve para copiar valores ou referências para outras variáveis de tipos distintos.

Exemplo:

/* 
aqui existe um cast
estamos copiando o valor de um int para uma variável long
porém como nessa copia não existe nenhum risco, já que é possível representar todo inteiro como long, ele é implicito
*/
int i = 3;
long l = i;

/* 
Aqui necessitamos explicitar usando um "molde" (cast), para que o código compile
Já que existe o risco de perda de informação, pois nem todo long (8 bytes), pode ser representado como um int (4 bytes)    
*/
long l = 3;
int i = (int) l; //risco de perda de informação
/*
Aqui existe cast, já que estamos copiando a referência de um objeto do tipo String, para uma referência do tipo Object
Como não há risco para a jvm, como toda String é um Object (toda classe é filha de Object), o cast é implicito
*/
String string = "exemplo";
Object obj = string;

/*
Porém se fizermos isso. Temos que explicitar o cast pra poder compilar, já que não há garantias ao compilador que todo objeto é uma String.
 */
String outraVariavel = (String) obj; // risco de ClassCastException

Dê uma olhada no material dos cursos da Caelum: Casting, Casting de Referências, Wrappers

Espero ter ajudado. Abraço!

valeu pela ajuda