java中equals(),== 和 hashCode的相关内容

首先说一下== 它的作用就是判断两个对象的地址是不是相等的,判断是不是同一个对象。

然后,equals()  它的作用就是判断两个对象是否相等。

 以一下是源码,如果是object类型的对象 就会判断对象的地址是否相等,是否是同一个对象,是在Object类中的方法,等价于==

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

一般情况来说 我们都会对equals方法进行重写,如果没有重写,对比的是内存地址,重写了,对比的是内容。

对比一下equals() 和==的区别:1  ==是判断对象的内存地址是否一致,从而判断是不是一个对象,而equals()分两种情况,第一种,在没有重写的情况下和==一样。第二种情况重写了方法,对比的就是内容是否相等。一下为String.java中的 源码,看到,如果数据类型是String类型,那么就判断是内容是否一致。

 public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String) anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                            return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

第三个 hashCode()

它的作用就是获取哈希码值,哈希码的作用就是在哈希表中确定索引位置。也是object类中的方法。虽然在object类中,每个对象都包含这个方法,但是,仅仅当创建并某个“类的散列表”(关于“散列表”见下面说明)时,该类的hashCode() 才有用(作用是:确定该类的每一个对象在散列表中的位置;其它情况下(例如,创建类的单个对象,或者创建类的对象数组等等),类的hashCode() 没有作用。

上面的散列表,指的是:Java集合中本质是散列表的类,如HashMap,Hashtable,HashSet。也就是说:hashCode() 在散列表中才有用,在其它情况下没用。在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置

推荐阅读:Java hashCode() 和 equals()的若干问题解答

猜你喜欢

转载自www.cnblogs.com/xiaosisong/p/10837006.html