0
点赞
收藏
分享

微信扫一扫

为什么重写了equals方法就必须要重写hashcode方法?

小龟老师 2024-04-26 阅读 6

根据Object规范,规范约定:

  1. 如果两个对象通过equals方法比较是相等的,那么它们的hashCode方法结果值也是相等的。
  2. 如果两个对象通过equals方法比较是不相等的,那么不要求它们的hashCode方法结果值是相等的。
  3. 当在一个应用程序执行过程中, 如果equals方法比较中没有修改任何信息,那么在同一个对象上重复调用hashCode方法时,它必须始终返回相同的值。但如果从一个应用程序到了另一个应用程序,两个应用程序汇中调用hashCode方法的返回值可以是不一致的。

(1)如果只重写hashcode方法,返回的hash值虽然相同,但是其物理地址不相同,jvm会认为这是两个不同的对象

(2)如果只重写equals方法,在比较两个对象的时候,先判断hashcode返回的hash值就不一样,所以就不会调用equals方法

(3)重写hashcode方法和equals方法后,在返回hash值相同后再判断内容是否相同,才会判断出来这两个对象是不是相同的

详解:equals方法与hashCode方法根本就是配套使用的。对于任何一个对象,不论是使用继承自Object的equals方法还是重写equals方法。hashCode方法实际上必须要完成的一件事情就是,为该equals方法认定为相同的对象返回相同的哈希值。如果只重写equals方法没有重写hashCode方法,就会导致``equals`认定相同的对象却拥有不同的哈希值


举报

相关推荐

0 条评论