Dúvida questão [RESOLVIDO]  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
evertonsilvagomesjava
Virtual Machine Man
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 719
Online



Galera pq o teste de == ali retorna false? Eu sei que o metodo intValue() retorna um int e que == analisa a referencia na memoria porém se comparado um Integer com um int se ambos tiverem o mesmo valor retorna true como por exemplo:


Então pq o retorno e falso no teste dentro do método?

This message was edited 1 time. Last update was at 08/02/2010 15:01:07

douglas_vidotto
JavaTeenager
[Avatar]

Membro desde: 12/08/2008 15:43:18
Mensagens: 164
Offline

Acredito que seja por isso... dentro de methodA() você possui duas variáveis referenciando um objeto Integer cujo valor é 25. Essas variáveis são startingI e i. Depois você chama methodB() passando como argumento a variável i. Ao fazer isso, agora você tem 3 variáveis apontando para o objeto Integer cujo valor é 25: startingI, i e i2. Porém, em methodB() você faz o seguinte comando: i2 = i2.intValue();. Nesse ponto acredito que ocorra um boxing do valor retornado por intValue() criando um novo objeto Integer. Assim, startingI e i2 apontam para objetos diferentes na memória, mas que possuem o mesmo valor. Por isso no seu teste de == o valor é falso.


Edit: Para finalizar.. no seu outro teste:


Isso acontece por que ocorre um unboxing do valor do objeto referenciado por a. Assim temos dois ints sendo comparados. Aí, como o valor é o mesmo, == retorna true

This message was edited 1 time. Last update was at 08/02/2010 10:12:13

evertonsilvagomesjava
Virtual Machine Man
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 719
Online

Não sabia que ele iria criar um novo objeto ali não...



E criado entao um novo objeto integer? Pq na realidade ele ta fazendo um unboxing de Integer pra int...
mario.fts
Virtual Machine Man
[Avatar]

Membro desde: 14/05/2008 09:41:06
Mensagens: 606
Localização: São Paulo - ZL
Online

Na realidade vc ta fazendo de Integer pra int e pra Integer de novo, pq a variável i2 é do tipo Integer.

Mário Amaral Gonçalves
[Email]
evertonsilvagomesjava
Virtual Machine Man
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 719
Online

hum é isso mesmo, unboxing de Integer pra int e boxing de int pra Integer de novo, mas nao entendo pq ele cria um novo objeto...

This message was edited 1 time. Last update was at 08/02/2010 10:29:19

douglas_vidotto
JavaTeenager
[Avatar]

Membro desde: 12/08/2008 15:43:18
Mensagens: 164
Offline

Ele cria um novo objeto porque toda vez que ele faz um boxing, ocorre um processo parecido com isso (pelo que está no livro da Kathy Sierra):

This message was edited 1 time. Last update was at 08/02/2010 10:38:41

evertonsilvagomesjava
Virtual Machine Man
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 719
Online

hum ok vlw.
Metal Java Full
JavaTeenager
[Avatar]

Membro desde: 09/11/2009 11:42:27
Mensagens: 152
Localização: Fortaleza - CE
Offline

Dizer que um objeto (startingI) não pode ser comparado com uma variável primitiva (i2 = i2.intValue()) com == , faz algum sentido??

Graduação em Análise de Sistemas - Fortaleza (CE)
Sun Certified Programmer for the Java Platform, Standard Edition 6.0
Visitem meu Blog
"Reduza a Velocidade - Travessia de Modems 2400bps." OS VIGARISTAS - Frases de Informática
[Email] [MSN]
evertonsilvagomesjava
Virtual Machine Man
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 719
Online

Nao faz pq vc pode comparar com == que da true, a questao e que realmente ele criou um novo objeto.

Se vc fizer um teste vera que da true:

mario.fts
Virtual Machine Man
[Avatar]

Membro desde: 14/05/2008 09:41:06
Mensagens: 606
Localização: São Paulo - ZL
Online

se no unboxing ele usar new Integer(10), ele vai criar um novo:

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html#Integer(int)

Constructs a newly allocated Integer object that represents the specified int value.


Vc tem que considerar tbm o fator de cache do integer.



PQ? pq o Integer tem um cache interno de objetos, até o 127. Os objetos maiores que 127 são criados dinamicamente.

This message was edited 1 time. Last update was at 08/02/2010 12:50:44


Mário Amaral Gonçalves
[Email]
Metal Java Full
JavaTeenager
[Avatar]

Membro desde: 09/11/2009 11:42:27
Mensagens: 152
Localização: Fortaleza - CE
Offline

Noossaa!!!!
Preciso anotar essa!
Mto boa!

vlew

Graduação em Análise de Sistemas - Fortaleza (CE)
Sun Certified Programmer for the Java Platform, Standard Edition 6.0
Visitem meu Blog
"Reduza a Velocidade - Travessia de Modems 2400bps." OS VIGARISTAS - Frases de Informática
[Email] [MSN]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team