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

Responder a