请你说说hashCode()和equals()的区别,为什么重写equals()就要重写hashCode()?

主要从 hashCode()的用途,equals()的用途,hashCode(),equals()约定来回答:

hashCode()方法的主要用途是获取哈希码,equals()主要用来比较两个对象是否相等

两者之间有约定:① 如果两个对象相等,那么他们必须有相同的哈希码

                             ② 但两个对象的哈希码相等,那么他们的对象不一定相等

                             ③ 也就是说,equals()比较两个对象相等时,两个对象的hashCode()一定相等

                             ④ 两个对象的hashCode()相等时,equals()比较的两个对象不一定相等

加分回答:① Object类提供的equals()方法,默认是比较对象的内存地址是否相等。而实际业务中,通常是比较两个对象的内容是否相等,所以需要对equals()方法进行重写。

                  ② 由于hashCode()和equals()具有联动关系,所有equals()方法重写时,通常也要将hashCode()方法重写,使得两个方法始终满足约定。

之所以有规定,是为了使HashMap这样的哈希表正常使用

保证是同一个对象。如果重写了equals方法,而没有重写hashcode方法,会出现equals相等的对象,hashcode不相等的情况,重写hashcode方法就是为了避免这种情况的出现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值