Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Teste a igualdade entre Strings e outros objetos usando == e equals()

Na aula 1 foi citado que "O Java só coloca no pool as Strings criadas usando literais. Strings criadas com o operador new não são colocadas no pool automaticamente."

Porém na aula 2 foi citado que -- //Cria 2 objetos, um literal (que vai para o pool) e o outro //com o new String h = new String ("hello ");

Qual seria o correto?

4 respostas

Oi Rafael, tudo bem?

As duas afirmações estão corretas. :-)

O Java só coloca no pool as Strings criadas utilizando literal. Mas uma questão que pode ocorrer na prova, é perguntando quantos objetos do tipo String foram criados em um determinado trecho de código.

No caso do trecho que você citou, são criados dois objetos.

Perceba que utilizamos passamos um literal("hello ") para o construtor da classe String. Nesse caso é criado um novo objeto que é colocado no pool.

Um segundo objeto também será criado a partir desse literal, pois utilizamos o operador new. Esse objeto não é colocado no pool.

Para resumir, nessa linha, dois objetos são criados, mas apenas um vai para o pool, que é o literal "hello ".

Faz sentido? Se a dúvida persistir é só avisar.

Um abraço.

Continua não fazendo sentido, veja a seguir:

String nome = new String ("hello ");
String outro = "hello ";

System.out.println(nome == outro); // false

o hello do construtor de String não vai para o pool.

solução!

Oi Rafael,

O objeto do tipo String que é referênciado pela variável nome não vai para o pool.

Perceba que dois objetos são criados. Um com o literal e outro com o new. Mas o literal "hello " está apenas no pool, não temos referência pra ele.

O System.out.println retorna false porque:

  • nome referencia uma String que não está no pool (pois nome foi criado utilizando o new),
  • a variável outro referencia uma String que está no pool ("hello ").

Perceba que nome e outro apontam pra Strings diferentes.

Na primeira linha, você cria uma String que não vai para o pool, ao utilizar o new; mas fornece para o construtor o literal (hello), que vai para o pool.

E agora, fez sentido?

Abraço.

Perfeito ! Muito Obrigado