java 重写equals()

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值