gpt4 book ai didi

java - 为什么在Java中2个Object有不同的哈希码,但2个String有相同的哈希码?

转载 作者:行者123 更新时间:2023-12-03 04:31:18 27 4
gpt4 key购买 nike

class A{
int a;
A(){
this.a = 100;
}
}
//in main, we have:
A a = new A(), b = new A();
//and
String str0 = "123", str1 = "123";

为什么str0和str1的哈希码相同,而a和b却不同?

最佳答案

因为String 覆盖 Object.hashCode()而你的类(class)没有。

这意味着 String类有 hashCode() 的具体实现这将根据 String 计算哈希值值(value)。因此,对于具有相同值的两个字符串,哈希码将是相同的。

当您创建一个新类时,A ,例如,如果您没有为 hashCode() 提供自己的实现它将使用类 Object 的默认实现。默认实现只能保证哈希码来自完全相同的实例时相同。

方法Objects.hash() (对于多个值)和 Objects.hashCode() (对于单个值)使其更容易实现 hashCode()在你自己的类里面。例如:

class A{
int a;

A() {
this.a = 100;
}

@Override
public int hashCode() {
return Objects.hashCode(a);
}
}

请注意,如果用于创建哈希的属性值在某个时刻发生变化,则 hashCode() 的结果可能也会改变。

关于java - 为什么在Java中2个Object有不同的哈希码,但2个String有相同的哈希码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29266138/

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