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

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

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

この記事では、

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

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

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

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

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

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が入っていることに気づき、うっかりミスの防止にもつながります。

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

【速習Java】”==”と”equals”の違い(否定の方法も解説)
更新日 : 2019年5月7日

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メソッドについて忘れてしまったらこの記事を確認してくださいね!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

中井

中井

フリーライター。
主に美容系、ライフスタイル系含めこれまでに500本以上執筆。
趣味はオンラインゲームにフリーソフトの情報収集。

プログラミンとの出会い
-----------------------------------------------------------------------------------------
PCとプログラミングは大学からです。
それまでは、PCは触ると壊れると思い込んでました。

大学の授業で面白そうな理由でJavaを専攻。
全然授業についていけず、後ろの席の子に課題をやってもらってました。

そんなプログラミング音痴な状態で社会人を迎え、先輩からVBAがオススメと言われVBAを職場の人から教えてもらい習得。
その後、自分の業務に携わるものおは全てVBAを組みました。

会社を退職後、再度Javaを勉強する機会に恵まれ、大学でわからなかったことが一気に理解できるように。
念願のAndroidアプリでTwitterのクライアントアプリを作れるまでになりました。
以後、文章の修行の傍らJavaの最新情報を追う日々が続いています。