java 重写equals()

来源:互联网 发布:ppt如何修改图表数据 编辑:程序博客网 时间:2024/05/19 03:42

java 重写equals()

我们往往需要重写父类的equals()方法来实现自定义的相等比较。比如有个Person类,如果两个Person的身份证号和名字相等,那么这两个对象就相等。代码如下:

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)反射技术来比较两个对象是否是同一个类的实例更准确。

0 0
原创粉丝点击