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] 
-------------------------------------------------------------------------

Responder a