假如你要將某對象存入hash相應的集合中(比如hashSet)時,是根據對象的hashcode來判斷是否為同一對象的,一般默認hashcode是根據對象地址來算出的,而equals方法默認也是判斷兩對象地址是否相等,所以一般如果不重寫equals方法,hashcode方法也不改寫,而如果改寫了equals方法讓兩不同地址對象equals為true,同要改寫hashcode,讓他們的hashcode也能相等。
為什么呢?因為如果你要將對象存入hashSet中時,如果兩對象equals為true,那么應該是存一個的,但如果hashcode不一樣,實際卻是兩個都有存入這種情況,所以要將hashcode也改寫成一樣的。
還有一點要注意,如果改寫對象hashcode方法,那么將此對象存入hashSet中后就不要改變此對象中用來算出hashcode值的屬性變量,因為這樣會改變此對象的hashcode值,可能造成hashSet再也不能操作此對象,造成內存泄漏?。?/p>
新聞熱點
疑難解答