Caros membros da lista, Essa questão já foi discutida há um tempo atrás, voltou novamente agora, e ainda gera discussões. Postei uma mensagem há poucos dias, explicando a diferença entre "literais String" e "objetos String". Talvez tenha ficado meio confuso o texto, mais aí vai novamente. A diferença está apenas na forma de declaração e inicialização das variáveis String. Ao contrário do que ocorre com qualquer outra classe, na classe String existem 2 formas de declaração de variáveis. A primeira é a forma normal, com a clara indicação de alocação de novo espaço de memória através do operador new: String str = new String("texto"); E a outra forma de declaração de String, por meio do uso de literais. Um literal é a parte à direita da declaração abaixo. Observem que não há uso do operador new: String str = "texto"; Essa última forma de declaração de objetos é uma exceção à regra da declaração e inicialização de objetos em Java: não é criado um novo objeto, e sim reaproveitado um novo espaço, caso haja um espaço de memória ocupado por uma String de mesmo conteúdo. Portanto, SEMPRE a comparação abaixo vai ser TRUE: String str1 = "teste"; String str2 = "teste"; System.out.println(" str1 == str2 = "+(str1==str2)); Isso SÓ vale para String's. Tudo isso aqui está muito bem documentado, faz parte da especificação de JAVA, e pra quem quiser comprovar, é só dar uma lida no "The Java Language Specification", do James Gosling (et al.) Está disponível on-line. O endereço: http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html Boa leitura!!!
Rosfran Lins Borges Analista de Sistemas - NSV [EMAIL PROTECTED] Fóton® Informática e Serviços Fone: (61) 3031 5060 R.: 5037 -----Mensagem original----- De: Mauro [mailto:martini@;floripa.com.br] Enviada em: quarta-feira, 16 de outubro de 2002 12:29 Para: [EMAIL PROTECTED] Assunto: Re: Re: [java-list] Instâncias Nada disso. Como as coisas são Objetos o == compara se é o MESMO OBJETO, ou seja, se duas variáveis fazem referência pra MESMA INSTÂNCIA do objeto. Pode ter vários objetos iguais, ou seja, com a mesma forma e conteúdo que não são o mesmo objeto. Pra isso tem os métodos equals(), contentEquals(), compare(). Achar que dois objetos da mesma classe e com o mesmo conteúdo devem ser == é o mesmo que dizer que japônes é tudo igual :-). Como a classe String é imutável, não pode ser alterada, o compilador otimiza o uso da memória usando o mesmo objeto pras duas strings com mesmo conteúdo. Mas não conte com isto em todas as versões e implementações. Pode considerar que no exemplo o x só é igual ao y por coincidência. Michel writes: > Caro Luiz Barbosa, estou utilizando apenas para > exemplificar, se, antes da comparação, voce mandar > escrever na tela os valores de x e de y, serão ambos > de "100", mas o 1º ele considera iguais, o 2º não. > Já que possuem valores iguais, não acha que ambos > deveria retornar o mesmo valor na comparação (x == y)??? --- Mauro Ramos Martini [EMAIL PROTECTED] counter.li.org#225287 ------------------------------ 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 historico: http://www.mail-archive.com/java-list%40soujava.org.br 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 historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] -------------------------------------------------------------------------