Qual a diferenca entre:
String a = “abc”;
e
String a = new String(“abc”);
?
Qual a diferenca entre:
String a = “abc”;
e
String a = new String(“abc”);
?
nenhuma
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.
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.
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
Integer x = 10; //10 no pool, que vai de -128 até 127
Integer y = 10;
Integer z = new Integer(10);
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.
Certo.
Legal Vinicius.
Muito boa sua explicação, clareou legal pra mim também.
Abs,