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

Responder a