Sobes.tech
Junior — Middle

Por que é importante sobrescrever os métodos equals() e hashCode() juntos em Java?

sobes.tech IA

Resposta da IA

Em Java, os métodos equals() e hashCode() estão estreitamente relacionados e são usados para comparar objetos e trabalhar com coleções baseadas em hash (por exemplo, HashMap, HashSet).

Se sobrescrever equals(), mas não hashCode(), objetos considerados iguais por equals() podem ter códigos hash diferentes. Isso viola o contrato segundo o qual objetos iguais devem ter o mesmo hashCode(). Como resultado, as coleções baseadas em hash não funcionarão corretamente: por exemplo, podem não conseguir encontrar um objeto ou podem armazenar duplicados.

Por isso, é sempre importante sobrescrever ambos os métodos juntos para garantir o comportamento correto dos objetos nas coleções e na comparação.

Exemplo de sobrescrita:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    MyClass myClass = (MyClass) o;
    return field1.equals(myClass.field1) && field2 == myClass.field2;
}

@Override
public int hashCode() {
    return Objects.hash(field1, field2);
}