String的equals和hashCode方法

Posted lidedong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String的equals和hashCode方法相关的知识,希望对你有一定的参考价值。

对于判断对象是否相等,肯定需要重写它的equals和hashCode方法。不然使用默认的方法只会比较地址,因此会出现错误。

以String类为例,且看它的equals方法

    public boolean equals(Object anObject) {
    //比较地址
    if (this == anObject) {
        return true;
    }
    //看是否是String实例
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        //比较字符串长度
        if (n == anotherString.count) {
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = offset;
        int j = anotherString.offset;
        while (n-- != 0) {
            //比较字符是否相等
            if (v1[i++] != v2[j++])
            return false;
        }
        return true;
        }
    }
    return false;
    }          

主要思想:比较地址、比较长度、比较字符

hsahCode实现方式:

    public int hashCode() {
    int h = hash;
        int len = count;
    if (h == 0 && len > 0) {
        int off = offset;
        char val[] = value;

            for (int i = 0; i < len; i++) {
                h = 31*h + val[off++];
            }
            hash = h;
        }
        return h;
    }

 

以上是关于String的equals和hashCode方法的主要内容,如果未能解决你的问题,请参考以下文章

java 集合中重写hashCode方法和重写equals方法啥关系?

为什么要重写equals()方法 和 hashCode()方法

重写hashCode和equals方法

重写hashCode和equals方法

hashcode()和equals()的区别

Week8——hashcode()和equals()方法