Java

JavaのString比較|equalsの使い方と==演算子との違いを徹底解説

Javaで文字列を比較する際には「equalsメソッド」と「==演算子」の違いを理解することが重要です。

本記事では、equalsメソッドの基本的な使い方や、==演算子との違い、大文字小文字を無視する比較方法、null値の取り扱いなどをわかりやすく解説します。

これを読めば、JavaのString比較を適切に使い分けられるようになります!

punpee-code
punpee-code
JavaのString比較する際のequalsの使い方と==演算子との違いを徹底解説します!

equalsメソッドとは?基本から理解する

equalsの基本的な役割

equalsメソッド は、文字列の値が等しいかどうかを比較するために使用します。文字列の参照先ではなく、値そのものが比較対象となるのが特徴です。

String s1 = "Java";
String s2 = new String("Java");

// true(文字列の値が等しいため)
System.out.println(s1.equals(s2));

 

なお、文字列を含むの「参照型」と「基本データ型」の違いに関しては、以下の記事も参考にしてください。

Javaの基本データ型・参照型の違いを一覧表と図解付きで徹底解説Javaのデータ型を完全解説!基本データ型と参照型の違いや特徴を詳しく説明し、全データ型を一覧で整理しました。初心者にも分かりやすい内容で、Javaの基礎力を徹底強化!...

==演算子との違いは何?

参照型の比較においては、「==演算子」では参照先が同一かどうかを比較します。

String s1 = "Java";
String s2 = new String("Java");

// false(参照先が異なるため)
System.out.println(s1 == s2);

 

先ほどの例を用いて、s1とs2間で「==演算子」で比較をすると、値自体は「”Java”」の同一の文字列なのにも関わらず、s1とs2のそれぞれで異なるStringオブジェクトを生成していることになるため、比較結果はfalseとなります。

図で「equals()メソッド」と「==演算子」の違いをまとめてみましたので、ぜひ参考にしてください。

JavaでString比較にequalsを使う方法

大文字小文字を区別する場合の比較:equals

通常のequalsメソッドは、大文字と小文字を区別して値を比較します。

String s1 = "Abc";

String s2 ="abc";

// false(「"A"」と「"a"」の大文字・小文字が異なるため)
System.out.println(s1.equals(s2));

 

大文字小文字を無視した比較:equalsIgnoreCase

一方、大文字と小文字の差異を無視してString比較をする場合は、文字通りのメソッド名であるequalsIgnoreCase()メソッドを用います。

String s1 = "Abc";

String s2 ="abc";

// true(「"A"」と「"a"」の大文字・小文字の違いを無視して比較するため)
System.out.println(s1.equalsIgnoreCase(s2));

 

equalsメソッドを使う際の注意点

null値との比較でエラーを防ぐ

以下のように、s1に対してequalsメソッドを用いると、nullPointerExceptionの例外が発生します。

String s1= null;

String s2="abc";

// s1がNULLのため、nullPointerExceptionが発生
System.out.println(s1.equals(s2));

 

以下にこの例外処理を回避するための具体性な方法を示します。

例外の回避方法①:nullが入らない可能性のあるオブジェクトを先に呼び出す

String s1= null;

// 後半のs1がNULLだが、前半のs2の方はNULL値になり得ないため正常に評価される
System.out.println(”abc”.equals(s1));

 

例外の回避方法②:事前にNULL判定を行う

String s1= null;

String s2="abc";

if(s1 != null) {
    // NULL判定により、このブロック内には移行しない
    System.out.println(s1.equals(s2));
}

よくある質問

Q:equalsとcompareToの違いは?

equalsメソッドと似たメソッドにcomparableインターフェイスで定義されている、compareToメソッドがあります。

  • equals: 値が等しいか(true/false)を判定。
  • compareTo: 辞書順での大小関係を判定(負の数/0/正の数を返す)。

compareToメソッドの使用目的として、「ソートや順序付けの比較」として用いられることが多いと言えるでしょう。

String s1 = "apple";
String s2 = "banana";

/**
 * 【戻り値】
 * 負の整数 (s1 < s2)
 * 0 (s1 == s2)
 * 正の整数 (s1 > s2)
 */
System.out.println(s1.compareTo(s2)); // 負の値 (appleはbananaより辞書順が小さい)

 

以下に両メソッドの違いを表にしましたので、参考にしてください。

特徴equals()compareTo()
目的等価性の比較順序の比較
戻り値true または false整数 (負、0、正)
定義元ObjectクラスComparableインターフェース
主な用途オブジェクトの同値性判定ソートや順序付けの判定

 

まとめ

「equals()メソッド」のまとめ
  • equalsメソッドは、String型の値そのものを比較するために使用します。
  • 一方、参照型の比較においては、「==演算子」では参照先が同一かどうかを比較する。
  • null値の取り扱いには注意が必要です。

この記事を参考に、正確な文字列比較をマスターしてください!