首页 > 学院 > 开发设计 > 正文

JDK源码之解读String最终类的equals()和hashcode()方法实现原理

2019-11-11 03:01:16
字体:
来源:转载
供稿:网友
JDK源码之解读String最终类的equals()和hashcode()方法实现原理最近在看JDK源码,先从简单入手,比如 String类 ,List、Map和Set接口的实现类。。。

1,equals().

“abd”.equals(“abc”)采取的是两字符串长度相等,在相等情况下,分别赋值给两字节数组,循环数组,如对应位置两数组值不相等,则return false;如都相等,则 return true. 源码如下:

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;}

2, hashcode().

Stringstr=”ab”;

str.hashcode()==3105==(0*31+97)*31+98 //其中 97=a;98=b.   a对应的ascii码=97。

把字符串分成字符数组,

用一个初始值为零的值,按公式 h=31*h+chararray[i] 在遍历该字符串时候,重复计算,最后的h值就是该字符串数组的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;    }


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表