java Stirng源码中对hashCode是这样定义的
public int hashCode() {
int h = hash;
if (h == 0) {
int off = offset;
char val[] = value;
int len = count;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
返回的 是一个字符串定义的int值; 那这里肯定就有机会返回的 hashCode值相同,而value值不同的结果
我改装一下程序, 可以如下:
public static void main(String[] args) {
String str = "hierarch";
System.out.println(hashCode(str));
String str2 = "crinolines";
System.out.println(hashCode(str2));
}
public static int hashCode(String value) {
int hash = 0;
int h = hash;
if (h == 0) {
for (int i = 0; i < value.length(); i++) {
h = 31 * h + value.charAt(i);
}
hash = h;
}
return h;
}
打印值如下: hashCode相同,而值不同;
-1732884796
-1732884796
所以在这里, 在重申一下, hashCode相同, 不一定两个字符串的值相同; 如果两个字符串值相同,那么hashCode一定相同;
这两个字符串的hashCode都相同;
"buzzards" 和 "righto" 的hashCode 相同; "hierarch" 和 "crinolines" 的hashCode相同;
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情