Sobes.tech
Junior — Middle

Quando e por que motivo deve-se sobrescrever o método hashCode numa classe?

sobes.tech IA

Resposta da IA

O método hashCode deve ser sobrescrito na classe se você sobrescrever o método equals. Isso é necessário para cumprir o contrato entre esses métodos: se dois objetos são iguais segundo equals, seus códigos de hash devem ser iguais. Caso contrário, os objetos podem funcionar incorretamente em coleções baseadas em hash, como HashMap ou HashSet.

Exemplo:

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

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

Sem sobrescrever hashCode, objetos iguais segundo equals podem ter códigos de hash diferentes, o que causará erros ao usá-los em estruturas de dados baseadas em hash.