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