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/