Curiosidade[RESOLVIDO]

5 respostas
evertonsilvagomesjav

Não sabia q era valido a sintaxe abaixo:

int num = new Integer(10);

Atribuir um objeto a um primitivo. Agora isso ta criando um objeto no heap? Porque pelo que to vendo acontece um unboxing de Integer pra int e a variavel “num” continua no seu estado primitivo.

5 Respostas

blackfalcon

evertonsilvagomesjava:
Não sabia q era valido a sintaxe abaixo:

int num = new Integer(10);

Atribuir um objeto a um primitivo. Agora isso ta criando um objeto no heap? Porque pelo que to vendo acontece um unboxing de Integer pra int e a variavel “num” continua no seu estado primitivo.

Criar um objeto com certeza esta criando porque voce utilizou o new.

L

O que acontece é o seguinte:

A expressão:

int num = new  Integer(10);

é equivalente a

int num = new  Integer(10).intValue();

Ou seja, você cria o objeto, mas ela não é referenciada pela variável num, que recebe apenas o resultado de um unboxing. O objeto não é referenciado por ninguém, e é elegível à coleta tão logo a linha seja executada.

evertonsilvagomesjav

Leonardo3001:
O que acontece é o seguinte:

A expressão:

int num = new  Integer(10);

é equivalente a

int num = new  Integer(10).intValue();

Ou seja, você cria o objeto, mas ela não é referenciada pela variável num, que recebe apenas o resultado de um unboxing. O objeto não é referenciado por ninguém, e é elegível à coleta tão logo a linha seja executada.

fino do grão hehe, vlw!!!

Marky.Vasconcelos

Voce pode fazer isso apenas no Java 1.5>, foi quando colocaram os auto-wrapers(que é isso que voce fez).

new Integer cria um novo objeto em memoria.
Integer.valueOf retorna do pool.

Escolha o que pode ser melhor para voce.

robsontorres

esse recurso se chama autoboxing e entrou no java 5. ele permite que voce trate primitivos (int) e wrappers (Integer) de forma semelhante.

mas como disse o amigo Marky, cuidado que existe uma magica por baixo. sempre que vc tratar um objeto como primitivo, o java faz Integer.valueOf(valor) pra voce. e sempre que vc tratar o primitivo como objeto, ele faz objeto.intValue()

vc pode ter problemas serios de performance se nao souber usar o autoboxing direito, alem de tomar uns NullPointerException em lugares aparentemente impossiveis

Criado 26 de julho de 2010
Ultima resposta 27 de jul. de 2010
Respostas 5
Participantes 5