comparison - value equals java




Compara dos objetos con un cheque de nulo (5)

Apache Commons Lang tiene dicho método: ObjectUtils.equals (object1, object2) . No desea los medicamentos genéricos en tal método, dará lugar a errores de compilación falsos, al menos en el uso general. Iguala sabe muy bien (o debería, es parte del contrato) comprobar la clase del objeto y devolver falso, por lo que no necesita ningún tipo de seguridad adicional.

¿Existe un método en el JDK que compare dos objetos para la igualdad, teniendo en cuenta los nulos? Algo como esto:

public static boolean equals(Object o1, Object o2)
{
    if (o1 == null)
    {
        return o2 == null; // Two nulls are considered equal
    }
    else if (o2 == null)
    {
        return false;
    }

    return o1.equals(o2);
}

Parece tonto escribir este método yo mismo, ya que creo que ya debe existir en alguna parte.


Cada vez que me encuentro con una necesidad y pienso "esto es tan común que Java debe tenerla", pero creo que no, reviso el proyecto de Jakarta Commons. Casi siempre lo tiene. Una búsqueda rápida de la API commons-lang (que tiene las utilidades más básicas comunes) muestra un método equals() que proporciona lo que desea.



Si te preocupan las NullPointerExceptions, puedes probar igualdad como:

if (obj1 != null && obj1.equals(obj2)) { ... }

El contrato general de equals() es que un objeto no nulo nunca debería ser igual a una referencia nula, y que el método equals() debería devolver falso si está comparando un objeto con una referencia nula (y no arrojar un NPE) .


public static boolean equals(Object object1, Object object2) {
    if (object1 == null || object2 == null) {
        return object1 == object2;
    }
    return object1.equals(object2);
}