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によって、aとbに同じアドレス値が割り当てられるため、比較結果はtrueになる。 |
b == c |
false |
bにはstring constant poolのアドレス値が割り当てられ、cにはnew演算子によって新しいアドレス値が割り当てられるため、比較結果はfalseになる。 |
c == d |
false |
cにはnew演算子によって新しいアドレス値が割り当てられ、dにもnew演算子によって新しいアドレス値が割り当てられるため、比較結果はfalseになる。 |
a.equals(b) |
true |
aとbの値だけを比較するため、結果はtrueになる。 |
b.equals(c) |
true |
bとcの値だけを比較するため、結果はtrueになる。 |
c.equals(d) |
true |
cとdの値だけを比較するため、結果はtrueになる。 |