2015-01-31 110 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時,它們不相等。