Sobes.tech
Junior

Para que servem os métodos equals e hashCode em Java?

sobes.tech IA

Resposta da IA

Os métodos equals e hashCode em Java são utilizados para comparar objetos corretamente e para trabalhar com coleções baseadas em tabelas de hash (por exemplo, HashMap, HashSet).

  • equals(Object o): Define se o objeto atual é equivalente a outro objeto. Por padrão, compara referências de objetos. Sobrescreve-se para comparar o estado interno dos objetos.

  • hashCode(): Retorna um valor inteiro (código hash) do objeto. Usado pelas coleções para procurar elementos rapidamente. Deve estar em conformidade com equals: se dois objetos são iguais segundo equals, seus códigos hash devem ser iguais. A afirmação contrária não é verdadeira.

Uma implementação incorreta ou a ausência de sobrescrita desses métodos pode levar a um comportamento incorreto ao usar objetos em coleções, como a ausência de um objeto em um Set após adicioná-lo ou a impossibilidade de encontrar um objeto em um HashMap por chave.

Exemplo de sobrescrita:

public class MyObject {
    private int id;
    private String name;

    public MyObject(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true; // Comparação de referências
        if (o == null || getClass() != o.getClass()) return false; // Verificação de tipo e null

        MyObject that = (MyObject) o; // Casting

        if (id != that.id) return false; // Comparação de campos
        return name != null ? name.equals(that.name) : that.name == null;
    }

    @Override
    public int hashCode() {
        int result = id; // Cálculo do código hash baseado em campos
        result = 31 * result + (name != null ? name.hashCode() : 0);
        return result;
    }
}