Completando
No
segundo caso os objetos são diferentes, para ver se as Strings são iguais embora
estejão referenciadas no pool em posições diferentes
você
terá que buscar a representação canônica da String da seguinte
forma:
(s1.intern()==s2.intern()) que retornará true no caso de s1.equals(s2)
ser true.
-----Mensagem original-----
De: Luiz Felipe Molina [mailto:[EMAIL PROTECTED]]
Enviada em: Thursday, August 22, 2002 7:14 PM
Para: [EMAIL PROTECTED]
Assunto: Re: [java-list] StringOlá!Quando você faz "x", está automaticamente criando uma nova String com o valor x. Caso já haja uma String com este valor, e pelo fato das Strings serem estáticas em Java, o compilador simplesmente utiliza a referência já criada.Assim temos ques1 = "x";s2 = "x";(s1==s2) => Truepois s2 e s1 acabam apontando para o mesmo objeto, e por tanto o mesmo endereço de memória.Já no caso deString s1 = "x";
String s2 = new String("x");s2 será um novo objeto, uma nova String, com os mesmos caracteres contidos em "x". é como um clone, e por tanto neste caso s1 e s2 apontam para diferentes endereços de memória.Note que o ato de fazer:String s = new String("minha string");faz o compilador criar uma string quando encontra "minha string", e clona-la por causa do new String. Assim, no final desta linha, haveriam 2 objetos. 2 Strings com o valor "minha string", sendo que uma delas estaria sendo referenciada por s, e a outra não estaria sendo referenciada por ninguem. assim, esta se torna uma candidata a ser recolhida pelo garbage collection.Por tanto, prefira "minha string" à new String("minha string").Luiz Felipe Molina----- Original Message -----From: "Kleber Rodrigo Carvalho" <[EMAIL PROTECTED]>To: <[EMAIL PROTECTED]>Sent: Wednesday, August 21, 2002 4:18 PMSubject: [java-list] String> PessoALL
>
> Qual a diferença entre:
> String s1 = "x";
> String s2 = new String("x");
>
> ????
>
>
> Cheguei a esse duvida pois quando você faz (s1 == s2)
> vc está comparando o endereço de memoria. Neste caso e
> falso, pois s1 é uma instância de objeto e s2 é outra
> instância.
>
> Agora se eu fazer:
>
> String s1 = "x";
> String s2 = "x"
>
> Se eu fizer a comparação (s1 == s2), está dando true,
> ou seja ambos estão apontando para a mesma area de
> memoria.
>
> Alguém sabe porque ???
>
>
> Obrigado
> []'s
> Kleber Rodrigo de Carvalho
>
>
>
>
>
> __________________________________________________
> Do You Yahoo!?
> HotJobs - Search Thousands of New Jobs
> http://www.hotjobs.com
>
> ------------------------------ 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]
> -------------------------------------------------------------------------
>