gpt4 book ai didi

java - 两个java对象HashCode如何相似

转载 作者:行者123 更新时间:2023-12-02 03:26:27 25 4
gpt4 key购买 nike

在下面的代码中,我有两个字符串对象,它们都是不同的对象,但我得到了类似的哈希码。这怎么可能。

公共(public)类ObjectHashCode {

    public static void main(String...mj){

String str1 = new String("Aa");
String str2 = new String("BB");

System.out.println(str1.hashCode());//2112
System.out.println(str2.hashCode());//2112
}

}

最佳答案

您应该始终阅读有关方法输入和方法输出之间的基本契约的文档。在这种情况下,文档指出(省略不相关的段落):

It is not required that if two objects are unequal according to the {@link java.lang.Object#equals(java.lang.Object)} method, then calling the {@code hashCode} method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.

至于为什么值是相同的,Java 的好处是你可以随时查看源代码。这就是为 String 实例计算 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;
}

现在以字符串值为例:

"Aa" = 31 * (31 * 0 + 65) + 97 = 2112
"BB" = 31 * (31 * 0 + 66) + 66 = 2112

注意:'A' = 65、'B' = 66、'a' = 97 的数值

关于java - 两个java对象HashCode如何相似,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38812205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com