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.