1.equals の役割と ==
equals との違いは、2 つのオブジェクトが等しいかどうかを判断するために使用されます。
equals は通常、2 つのオブジェクトの内容が等しいかどうかを比較するために使用され、== は 2 つのオブジェクトのアドレスが等しいかどうかを比較するために使用されます。
equals メソッドは、デフォルトでは「==」と同等です。
Object クラスの equals メソッドは、2 つのオブジェクトのアドレスが等しいかどうか (同じオブジェクトであるかどうかとして理解できます) を判断するために定義されています。アドレスが等しい場合、オブジェクトは等しいとみなされます。 。これは、作成するすべての新しいクラスがequalsメソッドをオーバーライドしない場合、2つのオブジェクトが等しいかどうかの判断は「==」と同等、つまり2つのオブジェクトのアドレスが等しいかどうかを判断することを意味します。
Object クラスの equals メソッドは次のように実装されます。
public boolean equals(Object obj) { return (this == obj); }
しかし、実際の開発では、通常、2 つのオブジェクトの内容が等しい場合、2 つのオブジェクトは次のようにみなされます。等しい場合、等しい場合は true を返します。オブジェクトの内容が異なる場合は false を返します。
したがって、これは 2 つの状況に要約できます。
1. クラスは、equals メソッドをオーバーライドしません。equals メソッドを使用して 2 つのオブジェクトを比較する場合、これは == と同等です。比較、つまり 2 つのオブジェクトのアドレスが等しい。アドレスが等しい場合は true を返し、アドレスが等しくない場合は false を返します。
2. クラスはequalsメソッドをオーバーライドしており、2つのオブジェクトを比較する場合は上書き後の判定メソッドが使用されます。通常、equals を次のように書き換えます。2 つのオブジェクトの内容が同じ場合、equals は true を返し、内容が異なる場合、false を返します。
例:
public class EqualTest { public static void main(String[] args) { Person p1 = new Person(10,"张三"); Person p2 = new Person(10,"张三"); System.out.println(p1.equals(p2)); } } class Person{ int age; String name; public Person(int age, String name) { super(); this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
パーソンがequalsメソッドをオーバーライドしない場合、Objectのequalsがデフォルトで使用されます。これは、2つのオブジェクト(p1とp1のメモリ・アドレス判定)です。 p2). p1 と p2 は明らかにメモリ アドレスが異なるため、出力結果は明らかに false になります。
equals メソッドをオーバーライドするとどうなるでしょうか?同じ名前と年齢を持つ人は同一人物であると考えられるため、p1 と p2 はどちらも 10 歳のチャン サンを表しており、これら 2 つのオブジェクトは等しいはずです。オーバーライドされたequalsメソッドは次のとおりです:
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; }
同様に、上記の使用例が実行されると、結果はtrueになります。
ところで:equals メソッドが true を返す場合、== も true ですか?
は必ずしも真ではありません。等号が true を返す可能性は 2 つあります。1 つは 2 つのオブジェクトのアドレスが同じである場合、もう 1 つは 2 つのオブジェクトの内容が同じである場合です。内容が同じでもアドレスが異なる場合があるため、==比較の結果が偽となる場合があります。
main メソッドに == の判定を追加します:
public static void main(String[] args) { Person p1 = new Person(10,"张三"); Person p2 = new Person(10,"张三"); System.out.println(p1.equals(p2)); System.out.println(p1 == p2); }
出力結果は明らかですが、p1==p2 の結果は false です。
推奨チュートリアル: Java 入門チュートリアル
以上がJavaでオブジェクトが等しいかどうかを判断する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。