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

Por que o == retorna true nesses dois casos?

Por que o == retorna true nesses dois casos?

Integer x = 5; Integer x1 = 5;

String nome = "Luan"; String nome1 = "Luan";

2 respostas
solução!

No caso do Integer ele compara os dois valores primitivos, ele faz um parse implícito para o valor primitivo, no caso o int . E quando comparamos dois ints ele verifica o valor, por isso funciona.

No caso da String dá certo porque eles estão dividindo o mesmo "pool" de Strings, simplificando, na classe String temos uma especie de atributo estático que guarda Strings, já que são imutáveis eles estão apontando para o mesmo endereço o "Luan" por isso da verdadeiro, nessa comparação estão verificando o endereço na memória pois não são do tipo primitivo.

Se você testar a comparação assim:

String nome = "Luan"; 
String nome1 = new String("Luan");

Podemos notar que nesse caso o == dará falso, pois forçamos a String nome1 a criar um novo objeto, então ele não reaproveitara o valor "Luan" que já está no pool da classe String (Está no pool pois a declaração da variável nome já coloca ela lá). Logo os dois endereços na memória serão diferentes dando falso.

Da uma pesquisada em Wrapper class e Autoboxing and Unboxing no google, terão mais exemplos.

Nesse link tem uma publicação do stack muito boa sobre String e o pool de Strings: https://pt.stackoverflow.com/questions/3905/como-comparar-strings-em-java

Valeu Raphael

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software