Ruy,
no java internamente existe um pool de Strings ...
Mas apenas as Strings construidas com = "teste" sao colocadas no pool ...
Ha, mas em uma String sua vc pode forcar ela pra ir para o pool tbem mas nao
lembro qual eh o metodo ...
Vou dar um exemplo ...
Imagine que isso eh a memoria do JVM
----------
----------
nao se preocupe ainda com o conteudo ...
Qdo vc faz um
String s1 = "teste"
o java coloca isso no pool de String, q no exemplo eh o endereco 0x001 ...
----------
0x001 "teste"
----------
e seu s1, nada mais esta fazendo do q apontar pra esse 0x001
Entao se vc faz
String s2 = "teste"
Vc nao esta na verdade criando uma outra String, pq jah existe um "teste" no
pool entao o java apenas aponta seu s2 para 0x001 ... ou seja, o mesmo
endereco do seu s1 ...
E se vc fizer a comparacao com == o java vai comparar o endereco das
variaveis ...
entao s1 == s2 internamente o java compara 0x001 == 0x001 q eh igual ...
Bom ate ai tudo bem ...
Mas se vc fizer
s2 = new String("teste") vc acabou de dizer pro java criar uma nova String ...
O JVM cria um outro "teste" na memoria, mas com um novo endereco, e aponta
sua variavel para esse novo endereco, no caso 0x002 ...
----------
0x001 "teste"
0x002 "teste"
----------
E agora se vc fizer a comparacao com == internamente o JVM estara comparando
0x001 == 0x002 ... Que eh diferente, apesar do conteudo igual ...
Entao sempre q for comparar o conteudo da String, compare com o metodo equals
...
que compara o conteudo e nao o endereco de memoria ...
Entao s1.equals(s2) vai retornar igual, independente do endereco de memoria
...
Espero ter ajudado ...
On Thursday 03 January 2002 11:41 am, you wrote:
> Oi Pessoal,
>
> Antes de tudo, agrade�o pelas ajudas anteriores. Essa lista est� me
> ajudando bastante.
>
> Gostaria mais uma vez de pedir aux�lio. Estou com problemas na compara��o
> de strings. A quest�o � que armazeno numa Hashtable (utilizando o m�todo
> put()) alguns valores obtidos de um banco de dados.
>
> A primeira coisa que fa�o � exibir na tela o conte�do de algumas keys da
> Hashtable, atrav�s no m�todo get() (por ex.: <%=
> totais.get("adiantamentos") %>). At� aqui funciona sem problemas.
>
> Contudo, quando tento comparar o conte�do da key com uma string, por ex:
>
> if (totais.get("adiantamentos") == "0,00") {....
>
> a compara��o n�o � realizada, mesmo sabendo que o valor da key � "0,00".
>
> Olhando na documenta��o do m�todo get (classe Hashtable), notei que ele
> retorna um "Object". Por isso, tentei algumas varia��es:
>
> if ((String)totais.get("adiantamentos") == "0,00") {....
>
> ou
>
> if (totais.get("adiantamentos").toString() == "0,00") {....
>
> Apesar de compilarem sem problemas, nenhuma dessas solu��es resolveu a
> quest�o.
>
> Algu�m pode me dar uma pista?
>
> Desde j� agrade�o qualquer ajuda.
>
> Abra�os,
> Ruy Pedroso
>
>
> ------------------------------ LISTA SOUJAVA ----------------------------
> http://www.soujava.org.br - Sociedade de Usu�rios Java da Sucesu-SP
> d�vidas mais comuns: http://www.soujava.org.br/faq.htm
> regras da lista: http://www.soujava.org.br/regras.htm
> para sair da lista: envie email para [EMAIL PROTECTED]
> -------------------------------------------------------------------------
------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br - Sociedade de Usu�rios Java da Sucesu-SP
d�vidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------