【Java入門】equalsメソッドで比較をする方法総まとめ

こんにちは!エンジニアの中沢です。

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

equalsメソッドを使わずに、”==”演算子で文字列を比較しようとすると思い通りの結果にならないので注意が必要です。

この記事では、

・equalsメソッドの比較とは
・文字列をequalsメソッドで比較する方法
・equalsIgnoreCaseで大文字と小文字を区別せずに比較する方法
・equalsメソッドで否定の判定をする方法

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

・Objectsクラスのequalsメソッドでnullを安全に比較する方法
・equalsメソッドで2つのListを比較しデータを抽出する方法

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

今回はこれらの方法を覚えるために、equalsメソッドのさまざまな使い方をわかりやすく解説します!

equalsメソッドの比較とは

2つの文字列が等しいかどうかの比較をするには、equalsメソッドを使います。

int型などのプリミティブ型の場合は”==”演算子で比較しますが、String型は参照型なのでequalsメソッドで比較する必要があります。

文字列を”==”演算子とequalsメソッドで比較した結果を次のプログラムで確認してみましょう。

public class Main {
 
    public static void main(String[] args) {
 
        String str1 = "a";
        String str2 = "a";
 
        System.out.println("[変更前]");
        System.out.println("str1 = " + str1 + ", str2 = " + str2);
        System.out.println(str1 == str2);
 
        str1 = str1 + "b";
        str2 = str2 + "b";
 
        System.out.println("[変更後]");
        System.out.println("str1 = " + str1 + ", str2 = " + str2);
        System.out.println(str1 == str2);
 
        System.out.println("[equalsで比較]");
        System.out.println(str1.equals(str2));
    }
}

実行結果

[変更前]
str1 = a, str2 = a
true
[変更後]
str1 = ab, str2 = ab
false
[equalsで比較]
true

このプログラムでは、”==”演算子を使った1度目の比較で”true”を返していますが、文字列を追加した後の2度目の比較では同じ文字列なのに”false”を返しています。

このように、”==”演算子を使った場合は参照先の文字列が同じでもオブジェクトが違うと”false”を返すため、文字列を比較する場合にはequalsメソッドを使います。

このプログラムの実行結果から、equalsメソッドを使った場合には正しく文字列の比較ができることが確認できました!

String型の文字列をequalsで比較する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!

equalsIgnoreCaseの使い方

ここではequalsIgnoreCaseメソッドの使い方を解説します。

文字列を比較するときに大文字と小文字を区別せずに、同じ文字列として比較したい場合には、equalsIgnoreCaseメソッドを使います。

次のプログラムでequalsIgnoreCaseメソッドの使い方を確認してみましょう。

public class Main {
 
    public static void main(String[] args) {
 
        String str1 = "abc";
        String str2 = "ABC";
 
        System.out.println("[equalsで比較]");
        System.out.println(str1.equals(str2));
 
        System.out.println("[equalsIgnoreCaseで比較]");
        System.out.println(str1.equalsIgnoreCase(str2));
    }
}

実行結果

[equalsで比較]
false
[equalsIgnoreCaseで比較]
true

このプログラムでは、equalsメソッドとequalsIgnoreCaseメソッドで文字列を比較した結果をそれぞれ表示しています。

このプログラムの実行結果から、equalsIgnoreCaseメソッドで大文字と小文字を区別せずに文字列の比較ができることが確認できました!

equalsIgnoreCaseで大文字と小文字を区別せずに比較する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!

equalsメソッドで否定の判定をする方法

ここではequalsメソッドで2つの文字列が等しい場合に”false”を返す否定の判定をする方法を解説します。

equalsメソッドは2つの文字列を比較して、それが等しい場合に”true”を返しますが、等しい場合に”false”を返す処理をしたいときには否定の論理演算子”!”を使います。

次のプログラムで使い方を確認してみましょう。

public class Main {
 
    public static void main(String[] args) {
 
        String str1 = "abc";
        String str2 = "abc";
 
        System.out.println("[equalsで比較]");
        System.out.println(str1.equals(str2));
 
        System.out.println("[否定の論理演算子”!”を使用]");
        System.out.println(!str1.equals(str2));
    }
}

実行結果

[equalsで比較]
true
[否定の論理演算子”!”を使用]
false

このプログラムではequalsメソッドで文字列を比較した結果と、その結果を否定の論理演算子”!”で反転させた結果をそれぞれ表示しています。

このプログラムの実行結果から、否定の論理演算子”!”で比較の結果を反転できることが確認できました!

equalsメソッドで否定の判定をする方法についてはこちらで詳しく解説しているので、ぜひ確認してください!

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

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

ここではObjectsクラスのequalsメソッドを使って、nullPointerExceptionの例外を発生させずにnullを安全に比較する方法を解説します。

Stringクラスのequalsメソッドでは、メソッドの呼び出し元のオブジェクトがnullの場合にnullPointerExceptionの例外が発生します。

Java7で追加された、java.util.Objectsクラスのequalsメソッドを使えばオブジェクトがnullの場合でも例外を発生させずに安全に比較をすることができます。

Objectsクラスのequalsメソッドを使うには、次のインポート文が必要です。

import java.util.Objects;

Objectsクラスのequalsメソッドの使い方を、次のプログラムで確認してみましょう。

import java.util.Objects;
 
public class Main {
 
    public static void main(String[] args) {
 
        String str1 = null;
        String str2 = "abc";
        String str3 = null;
 
        System.out.println(Objects.equals(str1, str2));
        System.out.println(Objects.equals(str1, str3));
    }
}

実行結果

false
true

このプログラムではObjectsクラスのequalsメソッドでnullと文字列を比較した結果を表示しています。

また、null同士を比較した場合には”true”を返すことが確認できます。

このプログラムの実行結果から、nullの可能性がある文字列を安全に比較できることが確認できました!

Objectsクラスのequalsメソッドでnullを安全に比較する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!

【Java入門】Objectsクラスのequalsメソッドでnullを安全に比較
更新日 : 2018年11月20日

2つのListを比較してデータを抽出する方法

最後にequalsメソッドの実践的な使い方として、2つのListを比較して一致するデータを抽出する方法を解説します。

2重ループを使ったシンプルな方法で、2つのListから一致する文字を抽出して新しいListに追加する方法を次のプログラムで確認してみましょう。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
public class Main {
 
    public static void main(String[] args) {
 
        List<String> listA = new ArrayList<String>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
        List<String> listB = new ArrayList<String>(Arrays.asList("e", "n", "g", "i", "n", "e", "e", "r"));
        List<String> listC = new ArrayList<String>();
 
        System.out.println("before");
        System.out.println("ListA = " + listA);
        System.out.println("ListB = " + listB);
        System.out.println("ListC = " + listC);
 
        for (String a : listA) {
            for (String b : listB) {
                if (a.equals(b)) {
                    listC.add(a);
                    break;
                }
            }
        }
 
        System.out.println("after");
        System.out.println("ListA = " + listA);
        System.out.println("ListB = " + listB);
        System.out.println("ListC = " + listC);
    }
}

実行結果

before
ListA = [s, a, m, u, r, a, i]
ListB = [e, n, g, i, n, e, e, r]
ListC = []
after
ListA = [s, a, m, u, r, a, i]
ListB = [e, n, g, i, n, e, e, r]
ListC = [r, i]

このプログラムでは、2重ループとequalsメソッドを使ってListAの文字とListBの文字が同じ場合にListCに文字を追加しています。

2つのListを比較してデータを抽出する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!

【3分Java入門】2つのListを比較しデータを抽出する方法
更新日 : 2018年11月12日

まとめ

いかがでしたか?

今回はequalsメソッドの使い方について解説しました。

equalsメソッドはnullの場合の例外に注意する必要がありますが、Objectsクラスのequalsメソッドならnullを安全に比較できるのでぜひ覚えてくださいね。

もし、equalsメソッドを使う方法を忘れてしまったらこの記事を確認してください!

LINEで送る
Pocket

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

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

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

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

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

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

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

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

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

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

書いた人

中沢 丈

中沢 丈

フリーランスエンジニア。
システム開発からコンテンツ作成まで幅広く対応します。

連絡先はこちらです。
[email protected]