【Java入門】Objectsクラスのequalsメソッドでnullを安全に比較

こんにちは!フリーライターの中井です。

Javaには文字列を比較するequalsメソッドがあります。

この記事では、

・equalsメソッドとは
・Stringクラスのequalsメソッドの使い方

という基本的な内容から、

・Objectsクラスのequalsメソッドの使い方
・null同士を比較する方法

などの応用的な使い方に関しても解説していきます。

今回はこれらの比較の使い方をわかりやすく解説します!

なお、Javaの記事については、こちらにまとめています。

目次

equalsメソッドとは

equalsメソッドは、主にStringクラスの文字列の比較をするときに使われてきました。

Stringクラスのequalsメソッドでは、nullと比較する場合にnullPointerExceptionの例外が起こります。

この不便さを感じ取り、Java7以降ではjava.util.Objectsクラスのequalsメソッドが追加されました。

したがって、StringクラスのequalsメソッドではnullPointerExceptionの例外が発生する場合でも、Objectsクラスのequalsメソッドで行うと例外が発生しなくなります。

名前は同じequalsメソッドに見えますが、StringクラスのequalsメソッドとObjectsクラスのequalsメソッドは使い方が異なります。

順番に見ていきましょう。

Stringクラスのequalsメソッドの使い方

Stringクラスのequalsメソッドの基本的な使い方は以下の通りです。

strA.equals(strB)

実際にstrAとstrBに値を入れて使い方を理解しましょう。

public class JavaObjectsEqual {

    public static void main(String[] args) {
        String strA = null;
        String strB = "SAMURAI";
        
        System.out.println(strA.equals(strB));
        
    }
    
}

実行結果

Exception in thread "main" java.lang.NullPointerException

上記のプログラムでは、strAにnull、strBにSAMURAIを入れました。
strAとstrBを比較していますが、strAにnullが入っているためnullPointerExceptionの例外が発生しています。

例外発生の要因は、strAにnullを入れてしまい、nullのオブジェクトからメソッドを呼び出してしまったことです。
エラーをなくすには、strBとstrAの内容を逆にすると例外が発生しなくなりfalseを返すようになります。

public class JavaObjectEqual {

    public static void main(String[] args) {
        String strA = "SAMURAI";
        String strB = null;
        
        System.out.println(strA.equals(strB));
        
    }
    
}

実行結果

false

上記のプログラムでは、strAにSAMURAIを入れることにより比較できる文字列が先に入りました。
SAMURAIとnullを比較しているので当然答えはfalseを返します。

例外を避けるためには、比較できる文字列を先に持ってくることが重要です。
あえて、”SAMURAI”.equals(strB)としても構いません。

更に、比較する前にif文でnullチェックをするとすぐに値にnullが入っていることに気づき、うっかりミスの防止にもつながります。

詳細は下記の記事を確認してくださいね。

Objectsクラスのequalsメソッドの使い方

続いて、Java7から使用可能となったObjectsクラスのequalsメソッドの使い方について理解していきましょう。

Stringクラスのequalsメソッドとは、若干使い方が異なります。
Objectsクラスでは下記のように書きます。

Objects.equals(strA, strB);

実際にstrAにはnullを、strBには文字列を入れて比較を行います。
例外が発生することなく、falseが返ってくるか確認しましょう。

import java.util.Objects;

public class JavaObjectsEqual {

    public static void main(String[] args) {

        String strA = null;
        String strB = "SAMURAI";
        String strC = null;
        
        System.out.println(Objects.equals(strA, strB));
        System.out.println(Objects.equals(strA, strC));

    }
    
}

実行結果

false
true

上記のプログラムを解説致します。

Objectsクラスのequalsメソッドを使うときには、import文が必要になります。

忘れずに「import java.util.Objects;」を書きましょう。

strAとstrBをそれぞれ作り、strAにはnullを、strBにはSAMURAIを代入しています。

更にstrCを作り、strCにnullを代入しています。

前者は、nullと文字列、後者はnull同士の比較を行っています。

Stringクラスのequalsメソッドでは、null同士の比較ができませんでしたが、Objectsクラスでは、null同士の比較が可能なのでtrueを返しています。

nullPointerExceptionが面倒だと思ったときには、Objectsクラスのequalsメソッドを使うのも手です。

equalsメソッドで比較をする方法総まとめ

equalsメソッドで文字列を比較するいろいろな方法を次の記事にまとめているので、ぜひ確認してください!

まとめ

この記事ではequalsメソッドについて解説しました。

Java7からObjectsクラスのequalsメソッドが使えるようになりました。

StringクラスのequalsメソッドとObjectsクラスのequalsメソッドは、使い方が異なるので注意してください。

Objectsクラスのequalsメソッドでは、nullPointerExceptironの例外が発生せず安心して比較できることも併せて理解しましょう。

もし、equalsメソッドについて忘れてしまったらこの記事を確認してくださいね!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次