JAva書き換えequals()
3606 ワード
JAva書き換えequals()
カスタムの等しい比較を実現するために、親クラスのequals()メソッドを書き換える必要があります.たとえばPersonクラスがあり、2つのPersonの身分証明書番号と名前が等しい場合、この2つのオブジェクトは等しいです.コードは次のとおりです.
thisとobjが同じクラスのインスタンスであるかどうかを判断する際にinstanceofキーワードは使用されません.instanceofは、左のオブジェクトが右のクラスのインスタンスであるかどうか、またはサブクラスのインスタンスであるかどうかを比較しているからです.StudentクラスがPersonを継承している場合、Studentsのインスタンスをequals()メソッドに渡し、obj instanceof Personはtrueを返します.これは私たちが見たいものではありません.this.getClass().equals(Person.class)反射技術は、2つのオブジェクトが同じクラスであるかどうかのインスタンスをより正確に比較します.
カスタムの等しい比較を実現するために、親クラスのequals()メソッドを書き換える必要があります.たとえばPersonクラスがあり、2つのPersonの身分証明書番号と名前が等しい場合、この2つのオブジェクトは等しいです.コードは次のとおりです.
public class Person {
private String idStr;
private String name;
public Person(String idStr, String name){
this.idStr = idStr;
this.name = name;
}
public static void main(String [] args){
Person p1 = new Person("23233", "zxy");
Person p2 = new Person("232331", "zxy");
boolean b = p1.equals(p2);
System.out.println(b);
}
@Override
public boolean equals(Object obj) {
// ,this obj Person ,strId name
if(this == obj){
return true;
}
//obj null this obj
if(obj!=null && this.getClass().equals(Person.class)){
Person p1 = (Person)obj;
// strId name
if(this.getName().equals(p1.getName()) && this.getIdStr().equals(p1.getIdStr()))
return true;
}
return false;
}
public String getIdStr() {
return idStr;
}
public void setIdStr(String idStr) {
this.idStr = idStr;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
thisとobjが同じクラスのインスタンスであるかどうかを判断する際にinstanceofキーワードは使用されません.instanceofは、左のオブジェクトが右のクラスのインスタンスであるかどうか、またはサブクラスのインスタンスであるかどうかを比較しているからです.StudentクラスがPersonを継承している場合、Studentsのインスタンスをequals()メソッドに渡し、obj instanceof Personはtrueを返します.これは私たちが見たいものではありません.this.getClass().equals(Person.class)反射技術は、2つのオブジェクトが同じクラスであるかどうかのインスタンスをより正確に比較します.