O valor da String não foi alterado. O da referência s1 sim. Veja o que acontece:
> String s1 = "Minha String"; ref. end. heap --------------- s1 = 0x99AB -----> 0x99AB "Minha String" --------------- > s1 = "Alterei o valor"; ref. end. heap --------------- s1 = 0x9A03 0x99AB "Minha String" | --------------- +-----------------> 0x9A03 "Alterei o valor" ---------------- Os endereços acima são hipotéticos. Você não tem acesso a eles. Veja que a constante "Minha String" não foi alterada. Quando você faz s1 = "Alterei o valor" na verdade você está copiando o ponteiro (ou referência) que contém o endereço onde está localizada a outra constante "Alterei o valor". Como não há mais referências apontando para "Minha String", o garbage collector irá recolher o objeto tão logo seja possível. O string é imutável porque não há métodos para modificá-lo. Veja que os métodos replace(), append(), etc. de String sempre retornam um novo String. O String original não é alterado. Como strings são imutáveis e constantes, eles são mantidos em um pool e as constantes são reutilizadas, por isto se você faz: String s1 = "A"; String s2 = "B"; s1 e s2 contém referências idênticas e consequentemente apontam para o mesmo objeto.Mas você não deve usar "==" para comparar strings pois geralmente, quando você precisa compará-los, o string que você recebe foi criado em outro lugar e realmente é outro objeto. Considere o seguinte: String s1 = "A"; String s2= new String("A"); Agora temos dois objetos distintos. Uma comparação com "==" não funciona. Helder. -- Helder da Rocha ([EMAIL PROTECTED]) Web Consultant www.argonavis.com.br São Paulo, Brazil +55 (11) 3044 4398 +55 (11) 9291 0567 ----- Original Message ----- From: "Rafael Steil" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Tuesday, August 20, 2002 12:34 PM Subject: Re: Fw: [java-list] Problema de IF > > Bom, eu concordo que a documentacao diz isso, e ja fiz testes onde realmente > nao consegui alterar o valor de uma String. Mas entao porque o codigo > > public class StringTest > { > public static void main(String args[]) > { > String s1 = "Minha String"; > System.out.println("s1: "+ s1); > s1 = "Alterei o valor"; > System.out.println("s1 alerada: "+ s1); > } > } > > mostra os valores "Minha String" "Alterei o valor" ? ou seja, o valor da String foi > modificado. Isso me deixa um pouco confuso tmb.. > > Rafael Steil > > > Ola... > > Como voce fez isso? Acho que nao pode mudar o valor de uma String de jeito nenhum > > Se voce olhar o codigo fonte da classe java.lang.String, vai ver: > > > > private char value[]; > > > > ------------------------------ 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] -------------------------------------------------------------------------