我所知道的是: -
" int hashCode()返回对象的内存地址作为对象的默认哈希值."
如果引用x并y表示两个不同的对象,则表达式
(x.hashCode() == y.hashCode())并不总是false
所以,我想询问在哪些情况下,2个不同对象的哈希值是相同的.
您可以hashCode在课程中覆盖.您通常会覆盖它以及覆盖equals,因此如果a.equals(b)为true,a.hashCode() == b.hashCode()则也为真(即使(a == b)为false).
但是,即使a.equals(b)是假的,a.hashCode() == b.hashCode()可能仍然是真的.
正如您在Javadoc of Object类中看到的:
- 如果两个对象根据equals(Object)方法相等,则对两个对象中的每一个调用hashCode方法必须生成相同的整数结果.
- 根据java.lang.Object.equals(java.lang.Object)方法,如果两个对象不相等,则不需要在两个对象中的每一个上调用hashCode方法必须生成不同的整数结果.但是,程序员应该知道为不等对象生成不同的整数结果可能会提高哈希表的性能.