45

JDKには、2つのオブジェクトが等しいかどうかを比較し、nullを考慮したメソッドがありますか?このようなもの:

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

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

4

7 に答える 7

76

Java 7.0 では、新しい便利なクラスが追加されました: Objects.

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

于 2014-09-03T09:37:32.690 に答える
17

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

于 2009-09-09T21:00:30.587 に答える
16

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

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

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

于 2012-02-15T22:56:49.013 に答える
5
public static boolean equals(Object object1, Object object2) {
    if (object1 == null || object2 == null) {
        return object1 == object2;
    }
    return object1.equals(object2);
}
于 2012-12-20T19:16:20.683 に答える
4

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

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

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

于 2009-09-09T20:56:47.510 に答える
2

ニーズに出くわし、「これは非常に一般的で、Java にはそれが必要だ」と思うが、そうでない場合はいつでも、Jakarta Commons プロジェクトをチェックします。それはほとんど常にそれを持っています。commons-lang API (最も基本的な共通ユーティリティを備えています) をすばやく検索すると、equals()必要なものを提供するメソッドが表示されます。

于 2009-09-09T21:01:08.683 に答える
1

Jakarta Commons Lang API にはObjectUtils.equals(Object,Object)を探しているものがあります

于 2009-09-09T21:12:47.903 に答える