为什么值类的值作为其hashCode"不是一个好主意"?

Roa*_*oam 5 java hash hashmap hashcode

的最后一段第9项有效的Java,第二版,布洛赫 说,对价值类,如Integer,String,Date返回该类的精确值的函数作为hashCode是不是一个好主意.

因此,Integer返回value它所代表的整数的类的hashCode实例并不是那么好.

既不是hashCode()String返回从整体内容,即,该字符直接映射的整数值String实例有.

这些 - hashCode()显然符合合同.

对我而言,这似乎是一个好主意而不是一个坏主意 - hashCode-s随着对象的不同而变化,并且这些hashCodes在被分散到HashMap/ 的桶之前被"标准化",HashSet以便hashCode-s条目不会对条目将进入哪个桶形成偏差.

我在这里缺少什么 - 是什么让类值直接映射到hashCode"坏主意"?

TIA

// ===========================

编辑

请参阅Steve Siebert对此的回答.

Ste*_*ert 4

它的意思是,那些 javadoc 规范准确地说明了 hashCode 是如何创建的。通过这样做,应用程序现在可以依赖它始终为真......现在这些实现永远不会改变 hashCode 的生成方式。

这并不意味着您不应该从您的值中派生哈希...只是不要告诉人们您在规范中如何做到这一点=)