美文网首页
equals()和hashcode()

equals()和hashcode()

作者: SScience | 来源:发表于2017-11-02 11:02 被阅读4次

    一,equals方法

    根据 Object 中的equals()源码,有如下约定:

    • 自反性:对于非 null 的对象 x,必须有 x.equals(x)=true;
    • 对称性:如果 x.equals(y)=true,那么 y.equals(x) 必须也为true;
    • 传递性:如果 x.equals(y)=true 而且 y.equals(z)=true,那么x.equals(z) 必须为true;
    • 对于非 null 的对象 x,一定有x.equals(null)=false
    • 当equals(Object obj)方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码

    二,hashcode方法

    根据 Object 中的hashCode()源码,有如下约定:

    • hashCode的存在主要用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的。
    • 如果两个对象相同,就是适用于equals(java.lang.Object) 方法,那么这两个对象的hashCode一定要相同。
    • 如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点。
    • 两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结构中,如Hashtable,他们“存放在同一个篮子里”。

    程序员必须搞清的概念equals和=和hashcode的区别
    JAVA基础-自问自答学hashCode和equals
    Java 的 equals 与 hashcode 对比分析

    相关文章

      网友评论

          本文标题:equals()和hashcode()

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