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 comequals: se dois objetos são iguais segundoequals, 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;
}
}