| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/09/2009 23:47:06
|
m4rkk
JavaBaby
Membro desde: 07/11/2008 08:16:29
Mensagens: 88
Offline
|
Referente ao código abaixo:
pra mim a saída seria false e false.
Pois quando entra no method a variavel primitiva int passa por boxing e se Transforma em um Integer, e como no == ele compara a referência desses Objetos avaliei como False, mas a saída foi true e false.
Qual a explicação pra isso?
existe uma regra, lí em algum topico q numero acima de 127 tem uma regra.... e se tem... tenho que me preocupar com questões assim na prova de certificação?
|
Developer |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2009 00:34:44
|
taaqui
JavaEvangelist
![[Avatar]](/images/avatar/13b96a16c5db9bc9de8f05b6f74a5d96.jpg)
Membro desde: 05/02/2008 12:25:07
Mensagens: 300
Localização: Rio de Janeiro
Offline
|
Não é possivel comparar int maiores que 127.
|
SCJP-SCWCD-SCBCD |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2009 01:14:42
|
Mikhas
Virtual Machine Man
![[Avatar]](/images/avatar/4388a23da67b154b780b78dd7ea4636e.jpg)
Membro desde: 17/06/2008 11:10:50
Mensagens: 677
Localização: São Paulo
Offline
|
taaqui wrote:Não é possivel comparar int maiores que 127.
to sabendo disso não. Explica melhor.
A respeito do código, o compilador java sabe que na hora de comparar os objetos do tipo java.lang.Integer, na verdade ele tem que comprar o valor numérico e não as referencias.
Mas esse lance do 127 eu não to sabendo não... vou dar uma pesquisada.
|
Refractor 1.6 - Easy reflection framework
Agora muito mais rapido!
Raze - The fastest CSS selector engine
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2009 01:27:11
|
Sergio Lopes
Moderador
![[Avatar]](/images/avatar/8232e119d8f59aa83050a741631803a6.jpg)
Membro desde: 17/11/2003 00:22:10
Mensagens: 1368
Localização: São Paulo - SP
Offline
|
Algumas implementacoes da classe Integer (a da Sun, por exemplo) fazem um cache de objetos para valores "pequenos" de Integers. O auto-boxing quando executado na verdade faz uma chamada a Integer.valueOf(int) que usa esse cache. Na VM da Sun o cache vai de -128 a 127.
Olha o código fonte da classe Integer da Sun. Veja na linha 601 o método valueOf e a chamada do cache. Aliás na linha 578 voce encontra a classe interna IntegerCache que faz justo isso.
Mas duvido que na SCJP caia esse tipo de coisa até porque isso é detalhe de implementação (nem o javadoc fala disso). E lembre que comparação de Integer deve ser feita com equals *sempre*, já que são objetos. Se fizer assim, nunca terá problemas.
[]'s
|
Sérgio Lopes - twitter: @sergio_caelum - blog pessoal: sergiolopes.org
Curso Java | Apostilas Java | Arquitetura Java | Curso Rails |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2009 09:04:22
|
moacirjava
Virtual Machine Man
![[Avatar]](/images/avatar/7cc273e8acc02886b2c4c65da1a74663.jpg)
Membro desde: 11/01/2008 11:31:08
Mensagens: 658
Localização: Minas Gerais
Offline
|
Essa regra é válida somente para ints ou outros tipos tem uma limitação igual?
|
"Para conseguir algo que você nunca teve, precisa fazer algo que nunca fez."
Analista de Sistemas.
SCJP 5
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2009 09:17:32
|
enantiomero
JavaEvangelist
Membro desde: 23/04/2008 09:44:26
Mensagens: 304
Offline
|
Sergio Lopes wrote:Algumas implementacoes da classe Integer (a da Sun, por exemplo) fazem um cache de objetos para valores "pequenos" de Integers. O auto-boxing quando executado na verdade faz uma chamada a Integer.valueOf(int) que usa esse cache. Na VM da Sun o cache vai de -128 a 127.
Tanto é que é apenas um detalhe de implementação, que na versão 7 do JDK será possível passar um daqueles famosos parâmetros -XX alguma coisa para poder ajustar o tamanho desse cache. (Não me lembro mais em que build isso foi acrescentado). Portanto não faz sentido você decorar que o tal cache vai de -128 até +127 (no caso dos tipos int, short, long, byte) ou de (char) 0 a (char) 127 (no caso do tipo char). Não faz sentido algum.
|
|
|
 |
|
|