O operador == é usado para comparar referências de objetos, ou seja, verifica se duas variáveis de referência apontam para o mesmo objeto na memória.
Quando você usa == para comparar dois objetos em Java, você está verificando se as referências (endereços de memória) apontam para o mesmo objeto, não se os objetos em si são iguais em termos de conteúdo.
Exemplo:
String str1 = new String("Hello");
String str2 = str1;
String str3 = new String("Hello");
boolean areEqual = (str1 == str2); // true, porque ambas as variáveis apontam para o mesmo objeto
boolean areEqual2 = (str1 == str3); // false, porque str1 e str3 apontam para objetos diferentes
equals() (Método de Igualdade):
O método equals() é um método definido em muitas classes em Java (incluindo Object e suas subclasses) e é usado para comparar o conteúdo dos objetos, não apenas as referências.
O comportamento do método equals() pode ser personalizado por classes específicas para comparar o conteúdo dos objetos de acordo com suas próprias regras.
Por padrão, o método equals() em Java se comporta da mesma forma que o operador ==, ou seja, ele verifica se as referências apontam para o mesmo objeto.
No entanto, muitas classes em Java, como String, Integer, Double, etc., substituem o método equals() para comparar o conteúdo dos objetos.
Exemplo:
String str1 = new String("Hello");
String str2 = new String("Hello");
boolean areEqual = str1.equals(str2); // true, porque o método equals compara o conteúdo das strings
Em resumo, você deve usar == quando deseja verificar se duas variáveis de referência apontam para o mesmo objeto na memória, e você deve usar equals() quando deseja comparar o conteúdo (ou a igualdade semântica) de dois objetos. Lembre-se de que, se necessário, você pode personalizar o comportamento do método equals() em suas próprias classes para definir como a igualdade deve ser determinada.