| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/06/2008 18:02:23
|
LuizClaudio
JavaEvangelist
![[Avatar]](/images/avatar/a9cf46a38a9b05e959f33215e5cdc38a.png)
Membro desde: 03/04/2006 21:50:51
Mensagens: 388
Offline
|
Olá Pessoal
Eu poderia jurar que o código abaixo imprimiria: "false,false", mas imprime "true,true" .Alguém sabe explicar pq?
This message was edited 1 time. Last update was at 17/06/2008 18:02:53
|
"Porque Deus amou o mundo de tal maneira que deu seu filho unigênito para que todo aquele que nele crê não pereça, mas tenha vida eterna." João 3.16 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/06/2008 18:13:07
|
Adolfo Rodrigues
Java Ninja
![[Avatar]](/images/avatar/5c9dc137c4e9543d7e4001d7bdef7413.jpg)
Membro desde: 18/04/2007 20:02:52
Mensagens: 270
Localização: Sampa
Offline
|
Em java, Strings são imutáveis. Procure nos artigos do GUJ ou no blog da Caelum (não lembro onde eu vi) que tem uma explicação muito legal.
|
http://www.adolfosousa.com.br/blog |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/06/2008 18:13:30
|
RafaelViana
GUJ Master
Membro desde: 23/03/2008 18:56:02
Mensagens: 1257
Localização: Venâncio Aires/RS
Offline
|
Olha não sei está certo, mas se você juntar a String "A" + "B" vai ficar AB, tipo se fizer "8" + "9" fica 89, vai uma string atrás da outra.
portanto "A" + "B" == "AB"
e
"A" + "B" == c (c == "AB")
mesma coisa que acima...
|
Rafael Rodrigues Viana
Estudando Java e Flex
Blog: http://www.cauirs.com.br/rafael/
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/06/2008 18:34:34
|
maquiavelbona
JWizard
![[Avatar]](/images/avatar/24bea84d52e6a1f8025e313c2ffff50a.jpg)
Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline
|
O grande causo é o pool de Strings. RafaelViana, você está parcialmente enganado. Quer um exemplo? Rode: E veja se vai dar true. Tem um site que achei que acho que a explicação está boa: http://www.xyzws.com/javafaq/what-is-string-literal-pool/3 Até!
This message was edited 1 time. Last update was at 17/06/2008 21:08:13
|
----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)
"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/06/2008 19:47:30
|
LuizClaudio
JavaEvangelist
![[Avatar]](/images/avatar/a9cf46a38a9b05e959f33215e5cdc38a.png)
Membro desde: 03/04/2006 21:50:51
Mensagens: 388
Offline
|
Que vacilo, as referências apontam para as mesmas String, afinal todas elas estão no pools, básico !!!
|
"Porque Deus amou o mundo de tal maneira que deu seu filho unigênito para que todo aquele que nele crê não pereça, mas tenha vida eterna." João 3.16 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2008 07:26:13
|
DaviPiala
Virtual Machine Man
Membro desde: 17/08/2007 19:17:35
Mensagens: 598
Localização: São Paulo
Offline
|
Só pra deixar mais claro vai esse exemplo simples
|
Si temi more regat
Efamima dove tore
Infata dio re
Infa lati plastire |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2008 08:36:30
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
O código que você postou é equivalente ao seguinte código, para o compilador:
É que quando você tem concatenação de constantes strings, o compilador entende que você quer na verdade é uma outra constante string, que seja o resultado da concatenação.
E como sabemos que as constantes strings estão no pool, então o resultado é "true", "true".
Mas isso é na verdade um detalhe de implementação; você precisa procurar na JLS (Java Language Specification) se isso é requerido pela definição da linguagem ou não.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2008 10:28:37
|
rmendes08
GUJ Master
![[Avatar]](/images/avatar/9ee855f3ce4dd40182183463232e2162.jpg)
Membro desde: 29/05/2008 14:09:28
Mensagens: 1618
Offline
|
Na verdade não entendi pq você achou que seria false,false
|
"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) 18/06/2008 10:33:57
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Seria false, false se não houvesse esse recurso de constantes strings estarem no pool. Dessa forma, o operador "==" iria sempre retornar false porque , como sabemos, normalmente objetos com o mesmo conteúdo mas comparados com "==" retornam false, porque não são o mesmo objeto.
== compara referências de objetos, não conteúdo de objetos.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2008 11:54:16
|
pintofree
Virtual Machine Man
![[Avatar]](/images/avatar/e0652a0045dbc0b14d016619158789ce.jpg)
Membro desde: 19/12/2007 12:44:42
Mensagens: 651
Localização: Cuiabá - MT
Offline
|
So retornaria True True se estivesem sendo comparadas utilizando o equals, que no caso compara o valor da String.
|
SCJP - Sun Certified Java Programmer
SCWCD - Sun Certified Web Component Developer, Enterprise Edition 5
"When the compiler's not happy, ain't nobody happy."
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2008 12:03:32
|
victorwss
JWizard
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline
|
pintofree wrote:So retornaria True True se estivesem sendo comparadas utilizando o equals, que no caso compara o valor da String.
Você não entendeu a pegadinha. Ele retorna true, true mesmo sem usar o equals!
|
Victor Williams Stafusa da Silva
Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.
Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.
Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.
É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).
Se você escreve "concerteza", "concerteza" você andou matando aulas de português. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2008 12:04:13
|
gomesrod
GUJ Ranger
![[Avatar]](/images/avatar/5de6755473dc988fe6c7db81f26a53ac.jpg)
Membro desde: 11/05/2007 19:46:22
Mensagens: 901
Offline
|
rmendes08 wrote:não entendi pq você achou que seria false,false
Na verdade eu também achei, e o motivo é o seguinte:
À primeira vista, a impressão é que ao fazer "A"+"B" seria gerado um novo objeto String (tem aquela história de fazer a operação usando StringBuffer...). Este objeto teria o valor "AB", mas não seria a mesma instância da literal "AB" (que está no pool).
Porém, o grande Thingol mais uma vez salva o dia:
thingol wrote:É que quando você tem concatenação de constantes strings, o compilador entende que você quer na verdade é uma outra constante string, que seja o resultado da concatenação.
This message was edited 1 time. Last update was at 18/06/2008 12:04:58
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2008 12:25:17
|
pintofree
Virtual Machine Man
![[Avatar]](/images/avatar/e0652a0045dbc0b14d016619158789ce.jpg)
Membro desde: 19/12/2007 12:44:42
Mensagens: 651
Localização: Cuiabá - MT
Offline
|
pintofree wrote:So retornaria True True se estivesem sendo comparadas utilizando o equals, que no caso compara o valor da String.
viajei na maionese aki pessoal, desculpa e a fome.
|
SCJP - Sun Certified Java Programmer
SCWCD - Sun Certified Web Component Developer, Enterprise Edition 5
"When the compiler's not happy, ain't nobody happy."
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2008 13:16:46
|
rmendes08
GUJ Master
![[Avatar]](/images/avatar/9ee855f3ce4dd40182183463232e2162.jpg)
Membro desde: 29/05/2008 14:09:28
Mensagens: 1618
Offline
|
hmmmm ... entendi! se eu tivesse algo do tipo
O resultado seria false, pois i1 e i2 referenciam objetos diferentes, mas com o mesmo valor. Porém , no caso das Strings, se eu tiver
O resultado é true, pois com o recurso de pool de Strings, s1 e s2 referenciam o mesmo objeto, é isso?
|
"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) 18/06/2008 13:34:05
|
LuizClaudio
JavaEvangelist
![[Avatar]](/images/avatar/a9cf46a38a9b05e959f33215e5cdc38a.png)
Membro desde: 03/04/2006 21:50:51
Mensagens: 388
Offline
|
rmendes08 wrote:Na verdade não entendi pq você achou que seria false,false
Muito bem explicado pelo thingol
|
"Porque Deus amou o mundo de tal maneira que deu seu filho unigênito para que todo aquele que nele crê não pereça, mas tenha vida eterna." João 3.16 |
|
|
 |
|
|