「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。

Javaでオブジェクト比較を行う際、よく遭遇するのが NullPointerException(ヌルポ)
特に equals() をそのまま呼び出した場合、対象が null だと即クラッシュしてしまいます。

この問題をシンプルに、かつ安全に解決するのが Objects.equals() です。
本記事では、その使い方・メリット・注意点をわかりやすくまとめます。


■ なぜオブジェクト比較でヌルポが起きるのか?

以下のようなコードは一見普通ですが…

anull のため、a.equals(b) を実行した瞬間に例外が発生します。

Javaのequals()はインスタンスメソッドなので、
呼び出し元が null かどうかを常に気にしないといけません。


■ Objects.equals() の登場で比較が劇的に安全に

Java 1.7 以降、Objects.equals() が標準で使えるようになりました。
これは 両方がnullでもOK / 一方がnullでもOK な、安全な比較メソッドです。

▼ 例:Objects.equals() を使うと…

このコードは絶対にヌルポになりません

▼ 動作仕様まとめ

abObjects.equals(a, b)備考
nullnulltrue両方nullなら同値とみなす
nullabcfalseヌルポにならない
abcnullfalseヌルポにならない
abcabctrueequals() と同じ

equals()と同じ比較を、null安全で行えるのが最大の特徴です。


■ equals() と Objects.equals() の違い

比較方法NPEリスク比較の正確性備考
a.equals(b)高い普通a が null だとNPE
Objects.equals(a, b)なしequals と同等Java7以降の定番

Objects.equals()内部で null チェック → equals() 呼び出し を行っています。


■ 実務でどう使う?ベストプラクティス

● ① フィールド比較(DTO, Entity, Bean)

nullを意識せずに比較できるため、非常に実用的。


● ② if文での比較処理

片側がnullの可能性がある場合でも安心。


● ③ MapやSetの比較にも利用可能

get() の戻り値が null でも安全。


■ 注意点:プリミティブ型はequalsより==でOK

プリミティブ型(int, long, booleanなど)はnullにならず、オブジェクトでもありません。

プリミティブ型はシンプルに == 比較が最適 です。


■ Objects.equals() を使うとコードが“事故りにくく”なる

  • nullチェック不要

  • 読みやすい

  • equals() と同じ意味で比較できる

  • 保守性が上がる

特に 業務システムや大量のBean比較があるプロジェクトで大活躍 します。


■ まとめ

Javaでのオブジェクト比較は、意外とヌルポの温床になりがちです。
Objects.equals() を活用すれば、null安全でシンプルな比較が標準で実現 できます。

✔ equals() を呼び出す側がnullだとヌルポ
✔ Objects.equals() は null 安全
✔ 使いどころは DTO/if文/コレクション比較など多数
✔ Java7以降は比較の標準として利用推奨

コードの安定性を高めたいなら、ぜひ積極的に Objects.equals() を使いましょう。

Ads by Google

0 0
Article Rating
申し込む
注目する
guest
0 コメント一覧
最も古い
最新 高評価
インラインフィードバック
すべてのコメントを見る
0
あなたの考えが大好きです、コメントしてください。x