您的位置:首页 > 编程语言 > Java开发

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

2017-02-07 16:30 716 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息