Sobrescribiendo Object.equals()

El método equals() de la clase Object tiene la siguiente firma:

public boolean equals(Object obj)

Se encarga de comprobar que el objeto pasado como parámetro es igual al objeto actual. La mejor forma de comprobar si dos objetos son iguales, es comprobar en primer lugar si los objetos son del mismo tipo. Si lo son, se hace un downcast al tipo del objecto actual (recordemos que la referencia se pasa como Object), y se comparan sus miembros. Por ejemplo:

@Override
public boolean equals(Object obj) {
   if(obj==null)
      return false;

   if (obj instanceof Persona) {
      boolean resultado = true;
      if (!this.DNI.equals(((Persona)obj).DNI)) resultado = false;
      if (!this.Nombre.equals(((Persona)obj).Nombre)) resultado = false;
      if (!this.Apellidos.equals(((Persona)obj).Apellidos)) resultado = false;
      if (!(this.Peso == ((Persona)obj).Peso)) resultado = false;

      return resultado;
   }

   return false;
}

Dados 3 objetos a, b y c, el método equals() debe ser:

  • Reflexivo: a.equals(a) debe devolver true
  • Simétrico: a.equals(b) debe ser igual a b.equals(a)
  • Transitivo: si a.equals(b) es igual a b.equals(c), entonces a.equals(c) debe devolver lo mismo
  • Consistente: si a.equals(b) es true, entonces a.equals(b) es true
  • a.equals(null) debe devolver siempre false
equals() de la clase Object tiene la siguiente firma:

public boolean equals(Object obj)

Se encarga de comprobar que el objeto pasado como parámetro es igual al objeto actual. La mejor forma de comprobar si dos objetos son iguales, es comprobar en primer lugar si los objetos son del mismo tipo. Si lo son, se hace un downcast al tipo del objecto actual (recordemos que la referencia se pasa como Object), y se comparan sus miembros." data-share-imageurl="" style="position:fixed;bottom:0px;left:0px;">