Sobes.tech
Junior — Middle

Explique as diferenças entre os métodos equals() e hashCode() em Java e por que eles são necessários juntos.

sobes.tech IA

Resposta da IA

Os métodos equals() e hashCode() em Java estão relacionados com a comparação de objetos e o seu uso em coleções.

  • equals() determina se dois objetos são iguais em significado (lógico). Por padrão, na classe Object, compara referências (ou seja, se são os mesmos objetos na memória), mas geralmente é sobrescrito para comparar o conteúdo.

  • hashCode() devolve um valor inteiro — o código hash do objeto. É usado, por exemplo, em tabelas de hash (HashMap, HashSet) para buscas rápidas.

É importante que, se dois objetos são considerados iguais por equals(), tenham o mesmo hashCode(). Esta regra garante o funcionamento correto das coleções baseadas em hash.

Exemplo:

class Person {
    String name;
    int age;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person p = (Person) o;
        return age == p.age && name.equals(p.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

Aqui, equals() compara os campos, e hashCode() devolve um hash baseado nos mesmos campos, garantindo a coerência.