Questão de certificação:
qual a diferença
String s1 = new String(“Olá”);
String s1 =“Olá”;
Questão de certificação:
qual a diferença
String s1 = new String(“Olá”);
String s1 =“Olá”;
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.
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().
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
obrigado pelas correções ziegfried
[]s