equals() y hashCode()

El método equals() va ligado al método hashCode() que devuelve un entero que caracteriza al objeto, cumpliento la propiedad de que dos objeto que sean equals() deben devolver el mismo hashCode(). Es decir

a.equals(b) => a.hashCode() == b.hashCode()

Esto permite que se pueda escribir código para buscar objetos iguales que primero miran el hashCode() y luego, si el hashCode() es igual, se mira el equals():

if (a.hashCode() == b.hashCode() && a.equals(b))

Las clases que hacen esta discriminación previa por hashCode(), simplemente funcionan mal si se redefine equals() pero no se redefine hashCode(). Esto ocurre, por ejemplo, en las clases HashMap y HashSet de la librería estándar de java.

Regla: si redefine equals(), debe redefinir hashCode().

Temas relacionados

63. equals (método) public boolean equals(Object)