Java Tips | 基本ユーティリティ:Objects.equals()

Web APP Java
スポンサーリンク
スポンサーリンク

Objects.equals()とは何か

Javaで業務システムを開発していると、オブジェクト同士の値を比較する処理が頻繁に登場します。

例えば、

  • ログインIDの比較
  • 商品コードの比較
  • データベース検索結果との照合
  • 入力値チェック
  • 更新前後の値比較

などです。

このような値比較で発生しやすい問題が「null」です。

そこで活躍するのが Objects.equals() です。

Objects.equals(比較対象1, 比較対象2)
Java

このメソッドはJava標準ライブラリが提供する「null安全な比較メソッド」です。

最大の特徴は、比較対象のどちらかがnullでも安全に比較できることです。

まずはString.equals()の問題を理解しよう

初心者が最初によく書くコードがこちらです。

// 商品コード
String code = null;

// 比較
if (code.equals("A001")) {
    System.out.println("一致");
}
Java

一見問題なさそうに見えます。

しかし実行するとエラーになります。

NullPointerException

理由は簡単です。

codeがnullなのにequals()メソッドを呼び出そうとしているからです。

Javaでは存在しないオブジェクトのメソッドを呼び出せません。

これが業務システムの障害原因として非常によく発生します。

Objects.equals()が問題を解決する

同じ処理をObjects.equals()で書いてみましょう。

// 商品コード
String code = null;

// null安全比較
if (Objects.equals(code, "A001")) {
    System.out.println("一致");
}
Java

このコードは例外を発生させません。

比較結果としてfalseを返します。

つまり、

  • nullでも安全
  • 例外が発生しない
  • 比較結果だけ取得できる

というメリットがあります。

ステップバイステップで理解する

ステップ1:比較対象を準備する

// 比較対象
String value1 = "Java";
String value2 = "Java";
Java

ステップ2:Objects.equals()を実行する

// 値比較
boolean result =
        Objects.equals(value1, value2);
Java

ステップ3:結果を確認する

// 結果表示
System.out.println(result);
Java

実行結果

true

同じ値なのでtrueになります。

様々な比較パターンを確認しよう

両方とも同じ値

// 同じ値
Objects.equals("Java", "Java");
Java

結果

true

異なる値

// 異なる値
Objects.equals("Java", "Python");
Java

結果

false

片方がnull

// 片方がnull
Objects.equals(null, "Java");
Java

結果

false

両方がnull

// 両方null
Objects.equals(null, null);
Java

結果

true

ここが重要なポイントです。

Objects.equals()は、 「両方ともnullなら同じもの」 と判断します。

内部でどのように動いているのか

イメージとしては次のような実装です。

// イメージコード
if (a == b) {
    return true;
}

if (a == null || b == null) {
    return false;
}

return a.equals(b);
Java

つまりJava標準ライブラリ側でnullチェックを行ってくれています。

そのため開発者が毎回nullチェックを書く必要がありません。

なぜ業務開発で重要なのか

現実の業務データにはnullが頻繁に登場します。

  • 未入力項目
  • 未登録データ
  • 検索結果なし
  • 外部API取得失敗
  • 設定値未定義

そのため比較処理を書く際には常にnullを考慮する必要があります。

Objects.equals()はその負担を大幅に減らしてくれます。

よくある実務例① ログインID比較

// DBから取得
String userId = getUserId();

// 入力値
String inputId = request.getUserId();

// null安全比較
if (Objects.equals(userId, inputId)) {

    // 一致時処理
    System.out.println("一致しました");
}
Java

ログイン処理や認証処理で非常によく見かけるパターンです。

よくある実務例② 更新判定

// 変更前
String oldName = customer.getOldName();

// 変更後
String newName = customer.getNewName();

// 値変更確認
if (!Objects.equals(oldName, newName)) {

    // 更新処理
    updateCustomer();
}
Java

データ更新判定では頻出の書き方です。

よくある実務例③ ステータス判定

// ステータス確認
if (Objects.equals(order.getStatus(), "COMPLETE")) {

    // 完了処理
    sendMail();
}
Java

ステータス管理システムでは非常によく利用されます。

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

String.equals()

// 左辺がnullだと例外
name.equals("Java");
Java

nullの可能性がある場合は危険です。

Objects.equals()

// nullでも安全
Objects.equals(name, "Java");
Java

こちらは例外が発生しません。

初心者がよく使う回避策との比較

初心者の方は次のような書き方を学ぶことがあります。

// リテラル側から比較
"Java".equals(name)
Java

これは非常に良い書き方です。

左辺が固定文字列なのでNullPointerExceptionになりません。

しかし比較対象が複雑になると、 Objects.equals()の方が読みやすい場合があります。

// より自然な比較
Objects.equals(name1, name2)
Java

実務で使えるテンプレート集

文字列比較テンプレート

// null安全比較
if (Objects.equals(value1, value2)) {

    // 一致時処理
}
Java

変更検知テンプレート

// 値変更チェック
if (!Objects.equals(oldValue, newValue)) {

    // 更新処理
}
Java

ステータス確認テンプレート

// ステータス判定
if (Objects.equals(status, "SUCCESS")) {

    // 成功処理
}
Java

データ照合テンプレート

// 入力値とDB値比較
boolean matched =
        Objects.equals(
                inputValue,
                dbValue
        );
Java

特に重要:==との違い

初心者が必ず理解すべきポイントです。

==は参照比較

// 参照先比較
str1 == str2
Java

オブジェクトの住所を比較しています。

equals()は値比較

// 値比較
Objects.equals(str1, str2)
Java

文字列内容を比較しています。

業務システムで文字列や業務データを比較する場合は、多くのケースでequals系を使用します。

情報セキュリティの観点から見る重要性

入力値比較は認証や認可、権限チェックなどの重要処理でも利用されます。

その際、NullPointerExceptionが発生すると、

  • ログイン失敗
  • サービス停止
  • 処理中断
  • 予期しないエラーページ表示
  • 可用性低下

につながる可能性があります。

Objects.equals()を利用することで、想定されるnull値による障害リスクを軽減できます。

もちろん、認証情報や権限情報の比較ではnullになった原因そのものを調査することも重要です。

しかし、比較処理自体は安全に行うべきであり、そのための標準的な手段としてObjects.equals()が活用されています。

初心者が覚えておくべき重要ポイント

  • nullでも安全に比較できる
  • NullPointerExceptionを防げる
  • 両方nullならtrueになる
  • 値比較であり参照比較ではない
  • 業務システムでは非常に利用頻度が高い
  • 更新判定や状態判定で頻出する
  • 迷ったらObjects.equals()を選ぶと安全

まとめ

Objects.equals()はJava標準ライブラリが提供するnull安全な比較メソッドです。

  • nullを考慮した値比較ができる
  • NullPointerExceptionを防止できる
  • 両方nullならtrueになる
  • 文字列比較や業務データ比較で頻繁に利用される
  • 更新判定や照合処理との相性が良い
  • コードの可読性と安全性を向上できる
  • 実務開発では最も利用頻度の高いObjectsユーティリティのひとつ

特に業務システムでは「入力値や取得データには常にnullの可能性がある」という前提で設計することが重要です。Objects.equals()を活用すると、安全で読みやすく、保守しやすい比較処理を書くことができるため、Java開発者なら必ず身につけておきたい基本ユーティリティのひとつといえるでしょう。

タイトルとURLをコピーしました