| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2008 21:41:39
|
Djonatah
JavaGuru
![[Avatar]](/images/avatar/9922aa62eb4eafdcea1bf84537bd4f24.jpg)
Membro desde: 11/05/2007 15:38:09
Mensagens: 204
Localização: São Bento do Sul - SC
Offline
|
Alguém poderia me explicar porque o código abaixo retorna falso, desde que pela definição há apenas um objeto na String pool?
Obrigado
Abraços
<><
|
--------------------------------------------------
" Daria tudo o que sei, pela metade do que ignoro " - Descartes
" Tudo tem seu tempo, cada coisa tem sua ocasiao " - Eclesiastes 3 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2008 21:49:41
|
LPJava
GUJ Hacker
Membro desde: 18/04/2006 12:50:23
Mensagens: 5523
Localização: Bahia/Porto Alegre
Offline
|
retorna falso pq a referencia eh para outro objeto que por acaso tem uma referencia semelhante a anterior. para ser true ai somente usando equals..
flw! feliz ano novo!
|
Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2008 22:35:29
|
rodrigo.bossini
GUJ Master
![[Avatar]](/images/avatar/3b6fe2dc98ceed6e1608e7cfc662ab11.jpg)
Membro desde: 01/07/2008 20:59:17
Mensagens: 1055
Offline
|
Exato. O operador == compara o padrão de bits de cada referência. No caso, cada referência aponta para um objeto diferente, logo o padrão de bits de cada uma delas é diferente.
|
http://www.rodrigobossini.com.br/
Meu Twitter:@rodrigobossini Se uma pessoa fala português há 30 anos e ainda não aprendeu, por que é que vou acreditar que ela está programando em alguma linguagem de programação há apenas 10 anos e sabe o que está fazendo? |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2008 22:39:06
|
lavh
GUJ Master
Membro desde: 30/07/2006 16:09:55
Mensagens: 1311
Offline
|
Djonatah wrote:Alguém poderia me explicar porque o código abaixo retorna falso, desde que pela definição há apenas um objeto na String pool?
Obrigado
Abraços
<><
Realmente deveria ter retornado true. Segue um texto que explica isso em detalhes:
http://www.xyzws.com/javafaq/what-is-string-literal-pool/3
A JVM que você está usando é a da Sun?
Pode ser que pelo motivo do seu código ser bem simples, na hora de compilar, o compilador abriu mão do String Pool, mas não
sei se é isso.
Se alguém souber dar uma resposta precisa!
PS: Pelo que eu entendi, o nosso amigo sabe que pra comparar String ele deve usar o equals, o que ele está querendo entender
é porque o String pool não foi usado no caso dele...
[]s
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2008 22:56:12
|
Djonatah
JavaGuru
![[Avatar]](/images/avatar/9922aa62eb4eafdcea1bf84537bd4f24.jpg)
Membro desde: 11/05/2007 15:38:09
Mensagens: 204
Localização: São Bento do Sul - SC
Offline
|
lach
Exatamente colega
não sei porque...como eu posso saber se minah JVM é da Sun? (eu ó consegui achar a version dela )
Espero mais comentários.
Abraços
|
--------------------------------------------------
" Daria tudo o que sei, pela metade do que ignoro " - Descartes
" Tudo tem seu tempo, cada coisa tem sua ocasiao " - Eclesiastes 3 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2008 23:01:11
|
Djonatah
JavaGuru
![[Avatar]](/images/avatar/9922aa62eb4eafdcea1bf84537bd4f24.jpg)
Membro desde: 11/05/2007 15:38:09
Mensagens: 204
Localização: São Bento do Sul - SC
Offline
|
rod.attack wrote:Exato. O operador == compara o padrão de bits de cada referência. No caso, cada referência aponta para um objeto diferente, logo o padrão de bits de cada uma delas é diferente.
rod.attack, eu quis dizer que SE existe apenas uma string na minha string pool as referências teriam que ter o mesmo bit pattern, pois se existe apenas um objeto como pode as referências divergirem?
espero que não lhe confundi
Abraços e um feliz ano novo \o/
|
--------------------------------------------------
" Daria tudo o que sei, pela metade do que ignoro " - Descartes
" Tudo tem seu tempo, cada coisa tem sua ocasiao " - Eclesiastes 3 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2008 23:02:27
|
rodrigo.bossini
GUJ Master
![[Avatar]](/images/avatar/3b6fe2dc98ceed6e1608e7cfc662ab11.jpg)
Membro desde: 01/07/2008 20:59:17
Mensagens: 1055
Offline
|
Sim, sim, desculpe pela confusão. Quando achar a resposta não deixe de postar.
|
http://www.rodrigobossini.com.br/
Meu Twitter:@rodrigobossini Se uma pessoa fala português há 30 anos e ainda não aprendeu, por que é que vou acreditar que ela está programando em alguma linguagem de programação há apenas 10 anos e sabe o que está fazendo? |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/12/2008 07:37:07
|
rc
Thread.start()
![[Avatar]](/images/avatar/6af2f1efc9c34f1f4d9e163bc6b8d8b4.jpg)
Membro desde: 15/04/2007 21:34:42
Mensagens: 40
Offline
|
Para mim, como esperado, sempre retorna true, nao importa se compilando com o compilador do Eclipse, ou JDK 1.5, ou 1.6.
Qual o compilador que tu usas?
|
Rafael Chaves
abstratttechnologies |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/12/2008 07:42:21
|
rc
Thread.start()
![[Avatar]](/images/avatar/6af2f1efc9c34f1f4d9e163bc6b8d8b4.jpg)
Membro desde: 15/04/2007 21:34:42
Mensagens: 40
Offline
|
E o teu código de teste é exatamente como tu mostraste? Se estiveres usando constantes, bom, aí as coisas são um pouco diferentes.
This message was edited 1 time. Last update was at 31/12/2008 07:42:32
|
Rafael Chaves
abstratttechnologies |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/12/2008 07:52:39
|
Djonatah
JavaGuru
![[Avatar]](/images/avatar/9922aa62eb4eafdcea1bf84537bd4f24.jpg)
Membro desde: 11/05/2007 15:38:09
Mensagens: 204
Localização: São Bento do Sul - SC
Offline
|
Hmmm eu fiz uns testes aqui no trabalho e retornou true tbm
Bom, eu tenho rodado os examples (em casa) por uma IDE (JCreator), e não sei qual JVM ela etá usando..
Vou chegar em casa e fazer o teste pela IDE.
Obrigado.
<><
|
--------------------------------------------------
" Daria tudo o que sei, pela metade do que ignoro " - Descartes
" Tudo tem seu tempo, cada coisa tem sua ocasiao " - Eclesiastes 3 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/12/2008 07:53:53
|
MarceloS
JavaTeenager
Membro desde: 02/06/2008 10:31:11
Mensagens: 185
Offline
|
Djonatah wrote:Alguém poderia me explicar porque o código abaixo retorna falso, desde que pela definição há apenas um objeto na String pool?
Aqui retorna true...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/12/2008 09:21:17
|
ricardo13
Virtual Machine Man
![[Avatar]](/images/avatar/3c34604a79b889444149f4f226868fd5.jpg)
Membro desde: 14/09/2007 10:19:03
Mensagens: 514
Localização: Mococa/São Carlos
Offline
|
olá pessoal,
Caramba !!! vcs querem fazer confusão na minha cabeça justo agora......faltndo 1 semana para minha SCJP.
Eu tenho "quase" absoluta certeza q é TRUE o resultado.........
Pelo fato q vc ta simplesmente adicionando um literal no pool de String.......
entaum quando vc atribui o primeiro, no caso s1, vc vai estar colocando "ABC" no pool.
na próxima atribuição, no caso s2, ele vai ver c ta no pool para economizar memória para não precisar alocar outro objeto.
dai s1 e s2 vão referenciar o msm objeto.
Agora c vcs me falarem q isso é FALSE........ eu vou ficar maluko hein........kkkkkkkk
Ricardo
|
/*
* Sun Certified Java Associate 1.0
* Sun Certified Java Programmer 6
* Sun Certified Web Components Development 5
* Bacharelado em Ciência da Computação - UNICEP
* Mestre em Ciência da Computação - ICMC/USP
*/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/12/2008 09:30:17
|
Djonatah
JavaGuru
![[Avatar]](/images/avatar/9922aa62eb4eafdcea1bf84537bd4f24.jpg)
Membro desde: 11/05/2007 15:38:09
Mensagens: 204
Localização: São Bento do Sul - SC
Offline
|
Pessoal,
Desculpe a confusão, acabei de descobrir que foi um problema operacional MEU
O código acima realmente retorna TRUE. O que eu estava tentando fazer e que retornava FALSE era o seguinte:
Eu não sei o porque ainda, estou tentando descobrir. tenho das sugetões.
1 - O modo que o método println() avalia o argumento
2 - Precendência de operador
CONCLUSÃO
O código do primeiro pos retorna TRUE
mas cuidado com o println ;D
Obrigado pelos posts, e desculpe-me pela confusão
Abraços
<><
|
--------------------------------------------------
" Daria tudo o que sei, pela metade do que ignoro " - Descartes
" Tudo tem seu tempo, cada coisa tem sua ocasiao " - Eclesiastes 3 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/12/2008 09:35:04
|
MarceloS
JavaTeenager
Membro desde: 02/06/2008 10:31:11
Mensagens: 185
Offline
|
Djonatah wrote:
Eu não sei o porque ainda, estou tentando descobrir. tenho das sugetões.
1 - O modo que o método println() avalia o argumento
2 - Precendência de operador
Ordem dos operadores:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/01/2009 18:37:25
|
rc
Thread.start()
![[Avatar]](/images/avatar/6af2f1efc9c34f1f4d9e163bc6b8d8b4.jpg)
Membro desde: 15/04/2007 21:34:42
Mensagens: 40
Offline
|
Nota que isso não tem nada a ver com o PrintStream#println, que é um método como todos os outros em Java. As regras para avaliação de expressões são sempre as mesmas independente do contexto em que elas aparecem (inicializando uma variável ou como argumento para um invocação de método).
|
Rafael Chaves
abstratttechnologies |
|
|
 |
|
|