比较两个对象并检查null

dcs*_*raw 43 java comparison null equals

JDK中是否有一个方法可以比较两个对象的相等性,从而计算空值?像这样的东西:

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);
}
Run Code Online (Sandbox Code Playgroud)

自己编写这个方法似乎很愚蠢,因为我认为它必须已经存在于某个地方.

icz*_*cza 71

Java 7.0增加了一个新的方便的类:Objects.

它有一个完全适用于此的方法: Objects.equals(Object a, Object b)

  • @EdwardFalk是的,还要记住Java 7(或任何其他版本)永远不会达到100%的可用性.今天是2015年7月12日,Java 7正好是4岁,Java 6是**9岁**.甚至Java 7也达到了**生命周期**,这意味着即使对于Java 7也不会有更多的公开更新.为什么你会鼓励只使用Java 6.0 API?是的,有些计算机只有Java 6.0,但我个人并不想为十年前的系统开发软件,而是放弃了Java 7和8中添加的功能. (5认同)

Yis*_*hai 17

Apache Commons Lang有这样一个方法:ObjectUtils.equals(object1,object2).你不希望在这种方法上使用泛型,它会导致伪造的编译错误,至少在一般情况下是这样.Equals非常清楚(或者应该 - 它是合同的一部分)来检查对象的类并返回false,因此它不需要任何额外的类型安全性.


Edw*_*alk 16

FWIW,这是我的实施:

private static boolean equals(Object a, Object b) {
    return a == b || (a != null && a.equals(b));
}
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我知道a和b将始终是相同的类型,但我怀疑即使它们不是这样也能正常工作,前提是a.equals()是合理实现的.

  • 新方法是`Objects.equals(Object a,Object b)` (2认同)

far*_*d_z 5

public static boolean equals(Object object1, Object object2) {
    if (object1 == null || object2 == null) {
        return object1 == object2;
    }
    return object1.equals(object2);
}
Run Code Online (Sandbox Code Playgroud)