我对类重写Equals和HashCode的理解

重写equals和hashcode的原因:

  为了通过调用hashcode()和equals()方法来判断2个对象是否相同。在Java中,JDK和第三方的涉及到比较对象是否相同的类都会通过调用对象的hashcode()和equals()来判断2个对象是否相同。
Java中所有的对象都继承Object类,Objects类的hashcode和equals方法对于自定义类来说,准确性太弱,因此,我们必须手动重写这两个方法来保证代码的准确。

为什么要重写hashcode?

  在验证两个对象是否一致时,如果都使用equals(),代价太大,hashcode()的代价相对较小,当两个对象的hashcode()不一致时,就可以认为这两个对象不相同,从而降低使用equals()的次数,从而提升性能。

为什么要重写equals?

  不同的对象也有可能会产生相同的hashcode,成为hash冲突,当产生hash冲突时,使用equals来检查两个类是否相同

equals方法的要求:

  • 自反性:对于任何非空的obj,obj.equals(obj)=true
  • 对称性:如果obj1.equals(obj2)=true;那么obj2.equals(obj1)=true
  • 传递性:如果obj1.equals(obj2)=true,obj2.equals(obj3)=true,那么obj1.equals(obj3)=true
  • 一致性:如果x和y的引用没有发生变化,那么反复调用x.equals(y)的结果应该相同
  • 对于任何非空的引用x,x.equals(null)应该返回false

Object类的默认hasCode和equals:

Objects类的默认HashCode返回的是对象的地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容