Boxing e unBoxing Questão diferente...  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
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
taaqui
JavaEvangelist
[Avatar]

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
[Email]
Mikhas
Virtual Machine Man
[Avatar]

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




[Email] [MSN]
Sergio Lopes
Moderador
[Avatar]

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
moacirjava
Virtual Machine Man
[Avatar]

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


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.
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team