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 classeObject, 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.