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);
}

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

有帮助吗?

解决方案

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

它有一个完全符合这个的方法: Objects.equals(Object a,Object b)

其他提示

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

FWIW,这是我的实施:

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

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

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

如果您担心NullPointerExceptions,您可以测试等式:

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

equals()的一般契约是非null对象永远不应该等于null引用,并且 equals()方法应该返回false如果要将对象与空引用进行比较(而不是抛出NPE)。

每当我遇到需求并思考“这是如此常见的Java必须拥有它”时但发现它没有,我检查了Jakarta Commons项目。它几乎总是有它。快速搜索commons-lang API(具有最基本的常用实用程序)显示 equals() 提供所需内容的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top