一般的にJavaにおけるequals()と”==”演算子はどちらもオブジェクトを比較して等質性をチェックするために使われますが、ここでは両者の違いをいくつか説明します。
- .equals() メソッドと == 演算子の主な違いは、一方がメソッドで、もう一方が演算子であることです。
- 参照比較(アドレス比較)には==演算子、内容比較には.equals()メソッドを使用することができる。 簡単に言うと、==は両方のオブジェクトが同じメモリ位置を指しているかどうかをチェックし、.equals()はオブジェクト内の値の比較を評価する。
- クラスがequalsメソッドをオーバーライドしない場合、デフォルトではこのメソッドをオーバーライドした最も近い親クラスのequals(Object o) メソッドが使用される。 詳しくはこちら
- コーディング例。
public
class
Test {
public
static
void
main(String args)
{
String s1 =
new
String(
"HELLO"
);
String s2 =
new
String(
"HELLO"
);
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
}
}
出力されるのは。
falsetrue
説明します。 ここでは、s1 と s2 という2つのオブジェクトを作成しています。
- s1とs2の両方は異なるオブジェクトを参照しています。
- s1とs2の比較に==演算子を使用すると、両者はメモリ上で異なるアドレスを持っているので結果は偽となります。
- 等号を使用すると、s1とs2で与えられた値のみを比較するので結果は真となります。
両演算子を詳しく理解しましょう。
等号演算子(==)
論理型を含むすべての基本型について等号演算子を適用することができ、オブジェクト型にも適用できます。
class
Test {
public
static
void
main(String args)
{
System.out.println(
10
==
20
);
System.out.println(
'a'
==
'b'
);
System.out.println(
'a'
==
97.0
);
System.out.println(
true
==
true
);
}
}
出力されるのは。
falsefalsetruetrue
オブジェクト型に==を適用する場合、引数の型(子から親、親から子、または同じ型)間に互換性がある必要があります。 そうでない場合、コンパイル時にエラーが発生します。
class
Test {
public
static
void
main(String args)
{
Thread t =
new
Thread();
Object o =
new
Object();
String s =
new
String(
"GEEKS"
);
System.out.println(t == o);
System.out.println(o == s);
System.out.println(t==s);
}
}
出力されるのは。
falsefalse// error: incomparable types: Thread and String
.equals()
Javaでは、string equals()メソッドは、文字列のデータ/コンテンツに基づいて、与えられた2つの文字列を比較します。 もし両方の文字列のすべての内容が同じなら、それは真を返します。 すべての文字が一致しない場合、それはfalseを返します。
public
class
Test {
public
static
void
main(String args)
{
Thread t1 =
new
Thread();
Thread t2 =
new
Thread();
Thread t3 = t1;
String s1 =
new
String(
"GEEKS"
);
String s2 =
new
String(
"GEEKS"
);
System.out.println(t1 == t3);
System.out.println(t1 == t2);
System.out.println(s1 == s2);
System.out.println(t1.equals(t2));
}
}
出力する。
truefalsefalsefalsetrue
説明します。 ここでは、2つのオブジェクトが同じデータを含んでいるかどうかをチェックするために、.equalsメソッドを使用しています。
- 上記の例では、3つのThreadオブジェクトと2つのStringオブジェクトを作成しています。
- 最初の比較では、t1 == t3であるかどうかをチェックしています。 t1とt3は両方とも同じオブジェクトを指していることが分かっているので、これは真を返します。
- 2番目の比較では、オブジェクトの内容ではなく、文字列オブジェクトを比較するために演算子「==」を使用しています。 ここでは、両方のオブジェクトは異なるので、この比較の結果は「偽」です。
- 2つのStringオブジェクトを.equals()演算子で比較しているとき、両方のオブジェクトが同じデータを含むかどうかをチェックしています。
- 両方のオブジェクトは同じ文字列、すなわちGEEKSを含むので、これは真を返します。 GeeksforGeeksが好きで、貢献したい場合は、contribute.geeksforgeeks.orgを使って記事を書くか、[email protected] まで記事を郵送することもできます。 あなたの記事が GeeksforGeeks のメインページに表示され、他の Geeks を助けることができます。