代码之家  ›  专栏  ›  技术社区  ›  dcstraw

用空值检查比较两个对象

  •  37
  • dcstraw  · 技术社区  · 15 年前

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

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

    7 回复  |  直到 7 年前
        1
  •  64
  •   icza    8 年前

    Java 7增加了一个新的便利类: Objects .

    它有一个精确的方法: Objects.equals(Object a, Object b)

        2
  •  17
  •   Steve Chambers    9 年前

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

        3
  •  15
  •   Edward Falk    12 年前

    这是我的实施:

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

    在我的应用程序中,我知道A和B总是相同的类型,但我怀疑即使它们不是,这也可以很好地工作,前提是A.Equals()是合理实现的。

        4
  •  5
  •   Brad Cupit Regan    9 年前
    public static boolean equals(Object object1, Object object2) {
        if (object1 == null || object2 == null) {
            return object1 == object2;
        }
        return object1.equals(object2);
    }
    
        5
  •  4
  •   matt b    15 年前

    如果您担心nullpointerExceptions,可以像这样测试相等性:

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

    总承包合同 equals() 非空对象不应等于空引用,并且 等式() 如果将对象与空引用进行比较(而不是抛出NPE),则方法应返回false。

        6
  •  2
  •   SingleShot    15 年前

    每当我遇到一个需要,并认为“这是如此普遍的爪哇必须有它”,但发现它没有,我检查雅加达公共项目。它几乎总是有它。快速搜索commons lang API(它具有最基本的公共实用程序)会显示 equals() 提供所需内容的方法。

        7
  •  1
  •   cjstehno    15 年前