equals与==

来源:互联网 发布:免费版cad软件下载 编辑:程序博客网 时间:2024/04/29 19:40

Object中equals方法默认比较对象的地址。

Object中hashCode方法默认使用对象的地址计算hashCode。

Object类的equals()方法

    public boolean equals(Object obj) {    //直接比较地址是否相等        return (this == obj);    }    

Object类的hashCode()方法

    //默认使用对象的地址计算hashCode    public native int hashCode();


也就是说,Object中的equals方法同 == 作用完全一样。然而在很多情况下,我们需要比较两个对象的内容时不希望使用这个默认的equals实现,例如,比较两个new出来的字符串的内容。

String a = new String("abc");String b = new String("abc");System.out.println(a.equals(b));
因此,String的实现中已经重写了equals()方法。实际上,大多数Java类库都实现了equals()方法,以便用来比较对象的内容,而非比较对象的地址。

String类

重写的equals()方法

    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()方法

    public int hashCode() {        int h = hash;        if (h == 0 && value.length > 0) {            char val[] = value;            for (int i = 0; i < value.length; i++) {                h = 31 * h + val[i];            }            hash = h;        }        return h;    }


0 0
原创粉丝点击