Duvida em String

7 respostas
joaosavio

Qual a diferenca entre:

String a = “abc”;

e

String a = new String(“abc”);

?

7 Respostas

wariows

nenhuma

wID

Na primeira o JVM já criou o espaço na memória e então só referencia para a variável declarada, memória pool

Na segunda o JVM criará o espaço na memória (em outro local da primeira) em tempo de execução e então referenciará este espaço para a variável declarada.

dstori

Na prática nenhuma.

Mas se você criar assim:

String a = "abc";

E já tiver alguma string “abc” no pool de strings da JVM, a referência aponta para este objeto.

Se você criar assim:

String a = new String("abc");

Um novo objeto é criado de qualquer maneira.

Mas o resultado é o mesmo.

ViniGodoy

Na prática isso quer dizer que:

String a = "abc";
String b = "abc";
String c = new String("abc");

a == b; //retorna true
a.equals(b); //retorna true

a == c; //retorna false
a.equals(c); //retorna true

b == c; //retorna false
b.equals(c); //retorna true

Ou seja, a e b apontam exatamente para o mesmo objeto (o criado no pool), enquanto C aponta para um segundo objeto, criado na marra com o new. Se você quiser que o Java substitua o objeto criado em C por um equivalente no Pool, use o comando intern:

c = c.intern(); //retorna o mesmo "abc" do pool
PS: Essa diferença também se aplica para casos como:
Integer x = 10; //10 no pool, que vai de -128 até 127
Integer y = 10; 
Integer z = new Integer(10);
gabrielmassote

Legal…

então todos objeto criado por new String(“teste”), nenhum estarão no pool pois a memória destinada a eles são separadas em tempo de execução certo?
já os que recebem por = “teste” possuem um lugar no pool por no momento de compilação já terem seu local na memória reservado, e assim a cada objeto declarado dessa forma o compilador procura no pool para ver se tem alguma String equivalente, certo?

se estiver correto, este tópico tirou minha dúvida sobre pool.

Abraço a todos.

ViniGodoy

Certo.

Rodrigo_de_Mello

Legal Vinicius.

Muito boa sua explicação, clareou legal pra mim também.

Abs,

Criado 9 de setembro de 2008
Ultima resposta 16 de set. de 2008
Respostas 7
Participantes 7