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