Compare how == differs between primitives and objects

Em Java, o operador == tem diferentes comportamentos quando usado para comparar tipos primitivos e objetos. Aqui estão as principais diferenças:

Comparação de Tipos Primitivos (int, char, float, double, boolean, etc.):

Ao usar == para comparar tipos primitivos, você está verificando se os valores desses tipos são iguais:

int x = 5;
int y = 5;

boolean resultado = (x == y);
System.out.println(resultado);  // Isso imprimirá "true"

Neste caso, == compara os valores armazenados nas variáveis x e y. Se os valores forem iguais, a expressão resultará em true; caso contrário, será false.

Comparação de Objetos:

Ao usar == para comparar objetos (incluindo instâncias de classes), você está verificando se as referências dos objetos são as mesmas, ou seja, se ambos apontam para o mesmo objeto na memória:

String str1 = new String("Hello");
String str2 = new String("Hello");

boolean resultado = (str1 == str2);
System.out.println(resultado);  // Isso imprimirá "false"

Neste caso, == compara as referências dos objetos str1 e str2, não os conteúdos das strings. Como ambos foram criados usando o operador new, eles são objetos diferentes na memória, resultando em false.

Comparação de Objetos com .equals():

Para comparar o conteúdo de objetos (como strings), você deve usar o método .equals():

String str1 = new String("Hello");
String str2 = new String("Hello");

boolean resultado = str1.equals(str2);
System.out.println(resultado);  // Isso imprimirá "true"

O método .equals() é implementado nas classes que o sobrescrevem (por exemplo, a classe String). Ele compara o conteúdo dos objetos em vez de suas referências.

Lembre-se de que, em geral, ao trabalhar com objetos, é aconselhável usar .equals() para comparação de conteúdo e == para comparação de referências.