こんにちは!フリーライターの中井です。
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メソッドについて忘れてしまったらこの記事を確認してくださいね!