2015-01-31 103 views
4

如果equals()hashCode() 方法的结果在对象的生命周期中发生变化,会出现什么问题?Java equals()和hashCode()的变化

谢谢!

+0

可能重复[在Java中重写equals和hashCode时应考虑哪些问题?](http://stackoverflow.com/questions/27581/what-issues-should-be-considered-when-overriding-equals- and-hashcode-in-java) – Dave 2015-01-31 19:30:44

+0

你可能最终会遇到一些内存泄漏 – rodrigoalves 2015-01-31 19:32:04

+0

只要这两种方法之间的契约没有被破坏,就应该没问题。当您修改对象的状态时,预计会更改结果。 – 2015-01-31 19:32:15

回答

7

一个问题是,如果将其添加到Collection中后,其将在之后发生更改,您将无法在HashSet或HashMap中找到该对象(如果该对象是Map中的键)。

在对象的生命周期中更改equals的结果可能会导致某些集合被打破。例如,您可能会发现在您的Set中有重复的对象,因为当第二个对象被添加到Set时,它们不相等。

相关问题