为什么要重写equals方法和hashcode方法


重写之后的方法

/**
 * 重写之后的equals方法和hashcode方法
 */
@Override
public boolean equals(Object o) {
    // 如果地址一样肯定相等
    if (this == o) return true;
    // 如果不是同一类,则肯定不相等
    if (o == null || getClass() != o.getClass()) return false;
    User user = (User) o;
    // 比较内容,如果是同一类且内容相等,则返回true
    if (username != null ? !username.equals(user.username) : user.username != null) return false;
    return age != null ? age.equals(user.age) : user.age == null;
}

@Override
public int hashCode() {
    int result = username != null ? username.hashCode() : 0;
    result = 31 * result + (age != null ? age.hashCode() : 0);
    return result;
}

Object类中的此两个方法

因为Object的equals方法是两个对象的引用值得比较,意思就是指向同一地址就相等,否则就相等;如果你需要利用对象里的值来判断是否相等,则重写equal方法

如果不重写equals方法,则对象调用此方法时调用的是父类Object中的equals方法,比较的是两个对象的地址值是否相等,如果重写了equals方法,则先比较地址值,如果地址值不一样,则进一步比较内容是否相等
Hashcode方法得到的哈希码和地址值默认是一致的,地址值即为哈希码转为了十六进制,不重写hashcode方法,则调用的Object的hashcode方法,如果重写了hashcode方法,则会按照重写的方法计算hash值,重写后的hashcode方法是将对象的内容按照ASCII表找到对应的字符,按照一定计算方式计算出一个数值

需要重写此两个方法的情况

如果对象作为map的key,此时如果同类型的两个对象的内容相同,需要覆盖之前的key就需要重写equals方法和hashcode方法,如果只有在同一个对象的时候才覆盖key则不需要重写equals方法和hashcode方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值