web-dev-qa-db-ja.com

java.util.Objects.isNull vs object == null

ご存知のように、 Java.util.Objects

このクラスは、オブジェクトを操作するための静的ユーティリティメソッドで構成されます。

そのようなメソッドの1つはObjects.isNull()です。

私の理解では、Objects.isNull()は2番目の=を省略することで、誤ってnull値をオブジェクトに割り当てる可能性を排除します。

ただし、APIノートには次のように記載されています。

このメソッドは、Predicate、filter(Objects :: isNull)として使用するために存在します

ifステートメントObjects.isNull()よりもobject == nullを使用する必要がある理由/状況はありますか?

Objects.isNull()は、述部のみに限定する必要がありますか?

50
Lucas T

ifステートメントでObjects.isNull()ではなくobject == nullを使用する必要がありますか?

ソースコード of IsNullメソッドを見ると、

 /* Returns true if the provided reference is null otherwise returns false.*/

 public static boolean isNull(Object obj) {
     return obj == null;
 }

同じです。違いはありません。したがって、安全に使用できます。

53
Suresh Atta

Objects.isNullは、Java 8ラムダフィルタリング内での使用を目的としています。

書くのがずっと簡単で明確です

.stream().filter(Objects::isNull) 

書くより

.stream().filter(x -> x == null).  

If ifのどちらでも機能しますが、== nullを使用するとおそらく読みやすくなりますが、最終的にはスタイル設定になります。

37
Craig Taylor

ソースを見てください:

public static boolean isNull(Object obj) {
    return obj == null;
}

null値を確認するには、次を使用できます。

  • Objects.isNull(myObject)
  • null == myObject // avoids assigning by typo
  • myObject == null // risk of typo

Objects.isNullPredicatesを対象としているという事実は、上記のように使用することを妨げません。

10
Mena

ifステートメントでObjects.isNull()に対してobject == nullを使用する必要がある理由/状況はありますか?

はい、1つの理由はコードをシンプルに保つことです。 ifステートメント内object == nullは明確で、よく知られています。たとえば誤植がある場合、不正行為を引き起こすことはできません。

私の理解では、Objects.isNull()は、2番目の=を省略することで、誤ってnull値をオブジェクトに割り当てる可能性を排除します。

omittedif (object = null) {}が存在する場合、=はコンパイルされないか、Booleanオブジェクトの場合に警告を生成します!実際、ifステートメント内でobject == nullObjects.isNull(object)を使用する理由はありません。次に、2つのバリアントを並べて示します。

if (object == null) {
}

if (Objects.isNull(object)) {
}

Objects.isNull()はPredicatesのみに限定すべきですか?

はい、それは述語だけに限定されていますが、どこでもObjects.isNull()を使用する技術的な障害はありません。

public static boolean isNull(Object obj)メソッドのjavadocから:

@apiNoteこのメソッドは、Java.util.function.Predicate、filter(Objects :: isNull)として使用するために存在します

したがって、メソッドをnot述語として使用する場合、単純なobject == nullと比較して、より複雑で扱いにくい式を実際に使用しています。

Objects.isNull(object)の利点を比較するスニペットを次に示します

List<String> list = Arrays.asList("a", "b", null, "c", null);

// As ready-made predicate
long countNullsWithPredicate = list.stream().filter(Objects::isNull).count();

// Lambda
long countNullsWithLambda = list.stream().filter(object -> object == null).count();

// Reimplement the Objects::isNull predicate
long countNullsWithAnonymous = list.stream().filter(new Predicate<Object>() {
    @Override
    public boolean test(Object obj) {
        return obj == null;
    }
}).count();
3
Vasil