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

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

中井

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

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

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

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

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

おすすめコンテンツ

まずはここから!初心者でも1から学べるプログラミング入門カリキュラム

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー