1. 程式人生 > >很久沒遇到重寫hashcode和equals

很久沒遇到重寫hashcode和equals

沒有重寫hashCode和equals之前報錯:返回異常 200 Handler dispatch failed; nested exception is java.lang.StackOverflowError
這裡寫圖片描述
這裡寫圖片描述
set集合res新增資源類時報錯
這裡寫圖片描述
解決辦法是SysResource中重寫hashcode,equals方法

不知道是哪裡出現了迴圈引用,分析原因可能是

集合物件,如List、Map、Set、Stack等也有這個問題,即他們的hashCode也是通過計運算元元素的hashCode得到的。也就是說,無論是List,還是Map、Set,只要內部出現了迴圈引用,如一個List引用了一個Map,Map又引用了頂層的List,呼叫hashCode方法就會導致堆疊溢位錯誤。

這種錯誤出現的機率非常低,但存在這樣的問題不能不說是Java集合設計的一個失誤。既然應用中有可能出現集合間的迴圈引用,就應該避免這種錯誤出現。