美文网首页
我对类重写Equals和HashCode的理解

我对类重写Equals和HashCode的理解

作者: haha_c609 | 来源:发表于2018-08-08 16:43 被阅读0次

    重写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返回的是对象的地址

    相关文章

      网友评论

          本文标题:我对类重写Equals和HashCode的理解

          本文链接:https://www.haomeiwen.com/subject/zcsxbftx.html