今日私は講師を交代し、彼は私に奇妙なコードを使用すると述べました。 (彼は.equals
そして、私が理由を尋ねたとき、彼は「そうだから!」と答えた。
以下に例を示します。
if (o1.equals(o2))
{
System.out.println("Both integer objects are the same");
}
私が慣れているものの代わりに:
if (o1 == o2)
{
System.out.println("Both integer objects are the same");
}
2つの違いは何ですか。そして、彼のやり方はなぜですか(.equals
)より良い?
これを見つけた クイック検索で、しかしその答えを本当に理解することはできません:
Javaでは、==
は常に2つの参照を比較します(つまり、非プリミティブの場合)。つまり、2つのオペランドが同じオブジェクトを参照するかどうかをテストします。
ただし、equals
メソッドはオーバーライドできます。そのため、2つの異なるオブジェクトが同じになる可能性があります。
例えば:
String x = "hello";
String y = new String(new char[] { 'h', 'e', 'l', 'l', 'o' });
System.out.println(x == y); // false
System.out.println(x.equals(y)); // true
さらに、2つの等しい文字列定数(主に文字列リテラルですが、連結による文字列定数の組み合わせ)は同じ文字列を参照することに注意してください。例えば:
String x = "hello";
String y = "he" + "llo";
System.out.println(x == y); // true!
ここで、x
とy
は同じ文字列への参照です。なぜなら、y
は"hello"
と等しいコンパイル時定数だからです。
==演算子は、オブジェクトが同じ場合に比較しますinstance。 equals()oeratorは、オブジェクトの状態(たとえば、すべての属性が等しい場合)を比較します。オブジェクトが別のオブジェクトと等しい場合、equals()メソッドをオーバーライドして自分自身を定義することもできます。
あなたと私がそれぞれ銀行に足を踏み入れ、真新しい口座を開設し、100ドルを入金すると、...
myAccount.equals(yourAccount)
はtrue
です。これは、同じ値を持っているためですが、myAccount == yourAccount
は、同じアカウントではないため、false
です。(もちろん、Account
クラスの適切な定義を想定しています。;-)
==は演算子です。 equalsはObjectクラスで定義されたメソッドです
==メモリ内の2つのオブジェクトのアドレスが同じかどうかをチェックし、プリミティブの場合、同じvalue.equalsメソッドがあるかどうかをチェックします。一方、比較される2つのオブジェクトの値が等しいかどうかをチェックします(もちろん、 equalsメソッドはオブジェクトに実装されています。equalsメソッドはプリミティブに適用できません(aがプリミティブの場合、a.equals(someobject)は許可されませんが、someobject.equals(a)は許可されます)。
==演算子は、2つのオブジェクト参照を比較して、それらが同じインスタンスを参照しているかどうかを確認します。これも、一致が成功するとtrueを返します。たとえば、
public class Example{
public static void main(String[] args){
String s1 = "Java";
String s2 = "Java";
String s3 = new string ("Java");
test(Sl == s2) //true
test(s1 == s3) //false
}}
上記の例==は参照比較です。つまり、両方のオブジェクトが同じメモリ位置を指します。
String equals()は、オブジェクト内の値の比較に対して評価されます。
public class EqualsExample1{
public static void main(String args[]){
String s = "Hell";
String s1 =new string( "Hello");
String s2 =new string( "Hello");
s1.equals(s2); //true
s.equals(s1) ; //false
}}
上記の例では、文字列の内容を比較しています。文字列が一致する場合はtrueを返し、そうでない場合はfalseを返します。