Javaの演算子==とequals()メソッドの違い

文字列(String)の比較

Javaでは文字列を比較するときに==equals()を使用するが、この2つは意味が異なる。
==は比較演算子としてアドレス値を比較し、equals()メソッドは内容そのもの、つまりデータ値を比較するためである。 そのため、状況に応じて使い分ける必要がある。

package com.devkuma.basic.string;

public class StringEquals {
    public static void main(String[] args) {
        String a = "devkuma";
        String b = "devkuma";

        String c = new String("devkuma");
        String d = new String("devkuma");

        System.out.println(a == b);  // true
        System.out.println(b == c);  // false
        System.out.println(c == d);  // false

        System.out.println(a.equals(b));  // true
        System.out.println(b.equals(c));  // true
        System.out.println(c.equals(d));  // true
    }
}

実行結果:

true
false
false
true
true
true

結果値の詳細な説明は以下のとおりである。

結果 説明
a == b true string constant poolによって、abに同じアドレス値が割り当てられるため、比較結果はtrueになる。
b == c false bにはstring constant poolのアドレス値が割り当てられ、cにはnew演算子によって新しいアドレス値が割り当てられるため、比較結果はfalseになる。
c == d false cにはnew演算子によって新しいアドレス値が割り当てられ、dにもnew演算子によって新しいアドレス値が割り当てられるため、比較結果はfalseになる。
a.equals(b) true abの値だけを比較するため、結果はtrueになる。
b.equals(c) true bcの値だけを比較するため、結果はtrueになる。
c.equals(d) true cdの値だけを比較するため、結果はtrueになる。

参考