web-dev-qa-db-ja.com

nullのチェックで2つのオブジェクトを比較する

Nullを考慮して、2つのオブジェクトが等しいかどうかを比較する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);
}

このメソッドは、すでにどこかに存在している必要があると思うので、自分で書くのはばかげているようです。

43
dcstraw

Java 7.0は新しい便利なクラス Objects を追加しました。

このためのメソッドがあります: Objects.equals(Object a, Object b)

72
icza

Apache Commons Langにはそのようなメソッドがあります ObjectUtils.equals(object1、object2) 。あなたはそのようなメソッドにジェネリックを使いたくない、それは少なくとも一般的には偽のコンパイルエラーにつながるでしょう。 Equalsは、オブジェクトのクラスをチェックしてfalseを返すことをよく知っている(または契約の一部である必要があります)ため、追加の型保証は必要ありません。

17
Yishai

FWIW、これは私の実装でした:

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

私のアプリケーションでは、aとbは常に同じ型になることを知っていますが、a.equals()が適切に実装されていれば、そうでない場合でも問題なく機能すると思います。

16
Edward Falk
public static boolean equals(Object object1, Object object2) {
    if (object1 == null || object2 == null) {
        return object1 == object2;
    }
    return object1.equals(object2);
}
5
farid_z

NullPointerExceptionsが心配な場合は、次のように等価性をテストできます。

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

equals()の一般的な規約は、null以外のオブジェクトがnull参照と等しくなることはなく、オブジェクトをnullと比較している場合はequals()メソッドがfalseを返すことです。参照(NPEをスローしない)。

4
matt b

私は必要に遭遇し、「これは非常に一般的であるJavaがなければならない」と思ったが、そうでないとわかったときはいつでも、Jakarta Commonsプロジェクトをチェックします。ほとんど常にそれを持っています。クイック検索commons-lang API(一般的なユーティリティの最も基本的なもの)の equals() メソッドは、必要なものを提供します。

2
SingleShot

Jakarta Commons Lang APIはあなたが探しているものを持っています ObjectUtils.equals(Object、Object)

1
cjstehno