| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2010 21:38:41
|
tinorberto
JavaEvangelist
![[Avatar]](/images/avatar/906b92b2e09a38a0dc5933b4943e87a0.jpg)
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2010 22:19:11
|
rmendes08
GUJ Master
![[Avatar]](/images/avatar/9ee855f3ce4dd40182183463232e2162.jpg)
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." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/04/2010 15:28:59
|
evertonsilvagomesjava
GUJ Master
![[Avatar]](/images/avatar/6370988b46be58caec00d925d91d2f99.png)
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:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/04/2010 15:57:52
|
tinorberto
JavaEvangelist
![[Avatar]](/images/avatar/906b92b2e09a38a0dc5933b4943e87a0.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/04/2010 16:14:21
|
evertonsilvagomesjava
GUJ Master
![[Avatar]](/images/avatar/6370988b46be58caec00d925d91d2f99.png)
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/04/2010 16:24:11
|
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.
|
|
|
 |
|
|