关于重写equals方法引发的不一致

今天使用快捷键去生成equals方法时,没有注意这里的选项
在这里插入图片描述
我用的最下面 Java7+的模板,生成的equals方法如下:

public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass())
        if (!(o instanceof Point)) return false;
        Point point = (Point) o;
        return x == point.x && y == point.y;

注意那里的 getclass方法,就是因为这个模板,导致我去比较 父子类的时候,发生了错误
在这里插入图片描述
输出的是 false;(父子类),同类还是true

于是我查阅资料,发现别的模板生成的equals方法是这样的

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof father)) return false;

        father father = (father) o;

        if (name != null ? !name.equals(father.name) : father.name != null) return false;
        return sex != null ? sex.equals(father.sex) : father.sex == null;
    }

用的是 instanceof 方法,这回再去比较 父子类,就满足对称性了。
在这里插入图片描述

附加:重写equals方法的 四大特性
自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回true。
(提醒:父类和子类,属性相同时需要注意下这个规则)
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改对于任何非空引用值 x,x.equals(null) 都应返回 false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨里的无聊人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值