JAva書き換えequals()

3606 ワード

JAva書き換えequals()
カスタムの等しい比較を実現するために、親クラスの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つのオブジェクトが同じクラスであるかどうかのインスタンスをより正確に比較します.