Javaでnull判定: Objects.isNull と == null の使い分け

  • 「現時点で自分が持っている知識で判断するとこうなる」という個人的見解です
    • 間違ってたらごめんなさい
    • 将来アップデートされる可能性があります
  • この記事では isNull と == を扱っていますが、 nonNull と != についても同様です

高階関数ではない場合

// こっちで書く
if (x == null) {
  // ...
}

// 読みやすさ・書きやすさの両面で微妙なので避ける
// (わざわざこう書くメリットがなさそう)
if (Objects.isNull(x)) {
  // ...
}

高階関数の場合

// ラムダ式
fooObj.fooMethod(x -> x == null);

// メソッド参照
fooObj.fooMethod(Objects::isNull); // import も必要

これはどっちもありかな、という程度の温度感。

高階関数かそれ以外かで使い分けるのが面倒。全部統一したい場合は?

この使い分けを考えることすら面倒というなら、いっそのこと Objects.isNull, Objects.nonNull のことは忘れてしまった方が良いと思います。

メモ

isNull/nonNull のドキュメント

https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/Objects.html#isNull(java.lang.Object)

This method exists to be used as a Predicate, filter(Objects::isNull)

  • 「このメソッドは Predicate として使われるために存在する」
  • 「それ以外の用途には使うべきではない」とは書かれていませんが、暗黙の前提扱いになっていてわざわざ書いてないんじゃないかと推測しています。

SNS で見かけた意見

「わざわざ Objects.isNull 使わなくていいんじゃないかなあ」って思ってるのは私だけじゃないみたいですよ、と言いたいために集めたご意見集。

https://x.com/Maru32768/status/1852210113450487999

https://x.com/irof/status/961275848018964481

https://x.com/irof/status/961276147605504000

https://x.com/hrkt/status/1181334050218266624

https://x.com/dossari_book/status/1722061751779258411

参考

この記事を読んだ人は(ひょっとしたら)こちらも読んでいます

memo88.hatenablog.com