Integer  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
tinorberto
JavaEvangelist
[Avatar]

Membro desde: 29/10/2008 15:54:46
Mensagens: 344
Localização: Viçosa - Minas Gerais
Offline

Estou com uma duvida, estou estudando wrapper, qual a diferença entre: Integer i = 10 e Integer i = new Integer(10)



Obrigado..

Bacharel - Ciência da Computação
Universidade Federal de Viçosa
OCJP 6
[Email] [MSN]
rmendes08
GUJ Master
[Avatar]

Membro desde: 29/05/2008 14:09:28
Mensagens: 1616
Online

A diferença é que na forma :



ocorre o chamado auto-boxing, isso é, o compilador cria um objeto do tipo Integer automaticamente. O inverso também é válido:



ou seja, um objeto Integer é convertido automaticamente para um primitivo int.

Ocorre que nos casos de auto-boxing o compilador otimiza o uso de objetos. Como objetos de wrapper classes são imutáveis, pode-se perfeitamente usar um único objeto para um único valor, e foi isso que o compilador fez. No seu caso, como tanto i e i2 devem referenciar um objeto Integer de valor 10, é usado um único objeto. Se eu não me engano, e é um teste interessante de se fazer, você obtém o mesmo efeito usando o método valueOf ao invés de usar o construtor, pois como você pode ver, ao usar explicitamente o construtor, você pode criar diversos objetos para o mesmo valor, o que é um desperdício de memória.

"A Técnica é transformada em Arte por quem a emprega"

"O futuro pertence àqueles que acreditam na beleza de seus sonhos"

Computadores Fazem Arte

http://www.uaijug.com.br

"É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados."
evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline

Tem a questao tb do range que o Integer usa pra criar um novo objeto, se vc fizer o teste disso por exemplo dará false:

tinorberto
JavaEvangelist
[Avatar]

Membro desde: 29/10/2008 15:54:46
Mensagens: 344
Localização: Viçosa - Minas Gerais
Offline

Olha essa...



Na comparação estamos comparando objetos do tipo Integer ou um primitivo int?

Bacharel - Ciência da Computação
Universidade Federal de Viçosa
OCJP 6
[Email] [MSN]
evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline

tinorberto wrote:Olha essa...



Na comparação estamos comparando objetos do tipo Integer ou um primitivo int?


Dentro do metodo estao sendo comparados objetos wrappers Integers, no caso se vc passar um numero entre 0 e 127 sera criado apenas um objeto Integer, onde se vc fizer esta comparaçao dará true.
el_loko
JavaEvangelist

Membro desde: 30/10/2007 12:09:43
Mensagens: 357
Offline

tinorberto wrote:Olha essa...



Na comparação estamos comparando objetos do tipo Integer ou um primitivo int?



Se vc está estudando pelo livro da Kathy Sierra, provavelmente deve ter passado lido sobre "ampliação".
A partir do momento que vc faz:



A classe Integer faz o auto-boxing, algo equivalente a:



Ou seja, a variavel "x" neste momento representa um objecto, não um tipo primitivo.
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team