Qual a diferença

5 respostas
edymrex

Questão de certificação:

qual a diferença

String s1 = new String(“Olá”);

String s1 =“Olá”;

5 Respostas

ziegfried

http://www.guj.com.br/java.tutorial.artigo.103.1.guj

edymrex

Mas no tutorial não fala a diferença…!

exemplo:

String s = new String(“Hello”);
String s=“Hello”;

o artigo fala que == não serve para comparar strings, mas não é bem assim,

se tivessemos um caso como este:

String s =Hello;

String s1=Hello;

if(s==s1)

nesta caso seria true já que referencia o mesmo objeto…!
== retorna true somente se referenciam o mesmo objeto já o método
equals verifica se o conteúdo dos objetos são iguais neste caso:

String s = new String(“Hello”);
String s1=“Hello”;

if(s.equals(s1)

retorna true pois o conteúdo do objeto são iguais.

ziegfried

Se você tivesse lido atentamente ao tutorial, teria visto algo sobre o pool interno de strings da JVM.

Ao utilizar String s = “Hello” a JVM verifica a existência de outro “Hello” no pool interno e adiciona s ao mesmo.
Já em String s1 = new String(“Hello”) um novo objeto String é criado e não é adicionado ao pool interno e nem é feita a verificação se já existe outro com o mesmo conteúdo nesse pool. Por isso s == s1 retorna false.

ps: para que um String criado com o new seja adicionado ao pool, utiliza-se o método intern().

seufagner

Com new você tenta criar uma nova entrada no pool de Strings explicitamente, enqaunto fazendo uma atribuição direta, ele vai reutilizar, caso exista, uma instância do pool

seufagner

obrigado pelas correções ziegfried

[]s

Criado 7 de abril de 2007
Ultima resposta 7 de abr. de 2007
Respostas 5
Participantes 3