Por que o == retorna true nesses dois casos?
Integer x = 5; Integer x1 = 5;
String nome = "Luan"; String nome1 = "Luan";
Por que o == retorna true nesses dois casos?
Integer x = 5; Integer x1 = 5;
String nome = "Luan"; String nome1 = "Luan";
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