O que faz o método equals() em Java?
sobes.tech IA
Resposta da IA
O método equals() em Java é usado para comparar dois objetos quanto à igualdade. Por padrão, no caso de objetos que herdam de Object sem sobrescrita, ele compara referências de objetos (==), ou seja, verifica se as variáveis apontam para o mesmo local de memória.
Sobrescrever corretamente o método equals() é importante para comparar objetos pelo seu conteúdo, e não pela sua localização na memória.
Ao sobrescrever equals(), deve-se seguir as seguintes regras:
- Reflexividade: para qualquer objeto não nulo
x,x.equals(x)deve retornartrue. - Simetria: para quaisquer objetos não nulos
xey, sex.equals(y)retornatrue, entãoy.equals(x)também deve retornartrue. - Transitividade: para quaisquer objetos não nulos
x,yez, sex.equals(y)retornatrueey.equals(z)retornatrue, entãox.equals(z)também deve retornartrue. - Consistência: para quaisquer objetos não nulos
xey, múltiplas chamadas ax.equals(y)devem devolver consistentemente o mesmo resultado, desde que as informações usadas para a comparação não mudem entre chamadas. - Para qualquer objeto não nulo
x,x.equals(null)deve retornarfalse.
Normalmente, ao sobrescrever equals(), também se deve sobrescrever o método hashCode(), mantendo o contrato: se dois objetos são iguais segundo equals(), seus códigos de hash, retornados por hashCode(), devem ser iguais. A reciprocidade não é obrigatória: se os códigos de hash são iguais, os objetos não necessariamente são iguais.
Exemplo de sobrescrita:
public class MyObject {
private int value;
private String name;
public MyObject(int value, String name) {
this.value = value;
this.name = name;
}
@Override
public boolean equals(Object o) {
// Comparação em si
if (this == o) return true;
// Verificação de null e tipo de objeto
if (o == null || getClass() != o.getClass()) return false;
// Conversão de tipo e comparação por campos
MyObject myObject = (MyObject) o;
return value == myObject.value &&
Objects.equals(name, myObject.name);
}
@Override
public int hashCode() {
// Geração do código hash baseada nos campos
return Objects.hash(value, name);
}
// getters, setters, etc.
}