Javaで文字列を比較するとき、こんなエラーに遭遇したことはありませんか?
java.lang.NullPointerException
原因は、null の変数に対して equals を呼び出してしまうことです。
この記事では、
- java Objects.equals の使い方
- null 安全な文字列比較の方法
- NullPointerException を防ぐ書き方
を初心者向けにわかりやすく解説します。
✅ 結論:null の可能性があるなら Objects.equals を使う
null の可能性がある場合は、
Objects.equals(a, b)
を使えば安全です。
java equals で null エラーが出る原因
次のコードを見てください。
String str = null;
System.out.println(str.equals("hello"));
str が null のため、equals を呼び出すことができず
java.lang.NullPointerException
が発生します。
これは「何も入っていない箱」に命令しようとしている状態です。
java Objects.equals の使い方
import java.util.Objects;
String str = null;
System.out.println(Objects.equals(str, "hello"));
このコードはエラーになりません。
なぜ Objects.equals は安全なの?
Objects.equals は内部で次のような処理をしています。
- 両方 null → true
- どちらか null → false
- 両方値あり → equals で比較
つまり、nullチェックを自動でしてくれる便利なメソッドです。
equals と Objects.equals の違い
| 比較方法 | null のとき | 安全性 |
|---|---|---|
| a.equals(b) | エラーになる可能性あり | △ |
| “文字列”.equals(a) | 安全 | ○ |
| Objects.equals(a, b) | 安全 | ◎ |
java 文字列比較で Objects.equals を使うべき場面
- DBから取得した値を比較するとき
- フォーム入力値を比較するとき
- 初期化されていない可能性がある変数
「nullかもしれない」と思ったら、Objects.equals を使うと安心です。
よくある質問(FAQ)
Q1. 文字列比較は常に Objects.equals を使うべき?
null の可能性がないと分かっている場合は、通常の equals でも問題ありません。
ただし、安全性を重視するなら Objects.equals を使う方が安心です。
Q2. equalsIgnoreCase も null でエラーになる?
はい、null の変数に対して呼び出すと NullPointerException が発生します。
null の可能性がある場合は事前にチェックするか、設計を見直しましょう。
まとめ
- 通常の equals は null だとエラーになる
- java Objects.equals を使えば null 安全に比較できる
- NullPointerException の多くは null チェック不足が原因
文字列比較でエラーが出たら、
まずは null を疑う → Objects.equals を検討する
この流れを覚えておきましょう。


コメント