美文网首页
equals() 方法和 hashcode() 方法简介

equals() 方法和 hashcode() 方法简介

作者: 最美的风景 | 来源:发表于2019-05-25 11:27 被阅读0次

    Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码。equals()和hashCode()都不是final方法,都可以被重写(overwrite)。

    equal()方法

    Object类中equals()方法实现如下:

    public boolean equals(Object obj) {
        return (this == obj);
    }
    

    很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、Integer、Double等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法,是进行的内容比较,而已经不再是地址的比较。

    虽然我们在定义类时,可以重写equals()方法,但是有一些注意事项;JDK中说明了实现equals()方法应该遵守的约定:

    自反性(reflexive)。对于任意不为null的引用值x,x.equals(x)一定是true。
    
    对称性(symmetric)。对于任意不为null的引用值x和y,当且仅当x.equals(y)是true时,y.equals(x)也是true。
    
    传递性(transitive)。对于任意不为null的引用值x、y和z,如果x.equals(y)是true,同时y.equals(z)是true,那么x.equals(z)一定是true。
    
    一致性(consistent)。对于任意不为null的引用值x和y,如果用于equals比较的对象信息没有被修改的话,多次调用时x.equals(y)要么一致地返回true要么一致地返回false。
    
    对于任意不为null的引用值x,x.equals(null)返回false。
    

    hashcode() 方法

    Object类中hashCode()方法的声明如下:

    public native int hashCode();
    

    可以看出,hashCode()是一个native方法,而且返回值类型是整形;实际上,该native方法将对象在内存中的地址作为哈希码返回,可以保证不同对象的返回值不同。

    hashCode()方法给对象返回一个hash code值,它的性质是:
    1、hashCode()在哈希表中起作用,如java.util.HashMap。

    2、如果对象在equals()中使用的信息都没有改变,那么hashCode()值始终不变。

    3、如果两个对象使用equals()方法判断为相等,则hashCode()方法也应该相等。

    4、如果两个对象使用equals()方法判断为不相等,则不要求hashCode()也必须不相等;但是开发人员应该认识到,不相等的对象产生不相同的hashCode可以提高哈希表的性能。

    相关文章

      网友评论

          本文标题:equals() 方法和 hashcode() 方法简介

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