作者:东东84321 | 来源:互联网 | 2023-05-16 13:15
因为你的班级没有String
覆盖 Object.hashCode()
.
这意味着String
该类具有特定的实现hashCode()
,将根据该String
值计算散列.因此,对于具有相同值的两个字符串,哈希码将是相同的.
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()
可能也会更改.
1> Anderson Vie..:
因为你的班级没有String
覆盖 Object.hashCode()
.
这意味着String
该类具有特定的实现hashCode()
,将根据该String
值计算散列.因此,对于具有相同值的两个字符串,哈希码将是相同的.
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()
可能也会更改.