2011-08-15 31 views
2

为什么Java中的对象的哈希码更改?它是否改变了? 它与Hashtable有什么关系? 每个对象都应该有它独特的hashcode。所以,重新引用它的原因是什么?为什么Java中的对象的哈希码更改?

在此先感谢。

+2

它什么时候改变? –

+0

你有一个它如何改变的例子吗? – Marcelo

+0

也许你应该读这个:http://stackoverflow.com/questions/6051960/how-to-write-a-good-hashcode-for-permutations和这个:http://stackoverflow.com/questions/1990734/hashcode等于 – panzerschreck

回答

2

默认哈希码的实现等同于对象标识。但是,一些对象覆盖散列码,这可能会给你一个根据对象状态而改变的散列码。

通常,如果您覆盖equals的定义(实际上,如果您覆盖等于您应该覆盖散列码),则会执行此操作。这是因为您希望通过您创建的任何定义来相等的对象返回相同的哈希码。否则,你可能会遇到这样的情况:映射包含多个“相等”对象,因为它们返回不同的哈希码。

+2

或者更糟糕的是,对象的哈希码在地图中发生更改,并且您失去了外部参照。取回它的唯一方法是迭代地图,并在您的标准上进行平等。 – corsiKa

+1

这真是一个非常不愉快的想法 - 我从不担心这种特殊的可能性,但现在我会。优秀的名字,顺便说一句。 –