簡體   English   中英

為什么不在方法HashCode()中使用非最終字段來生成hashCode

[英]why not to use nonfinal fields to generate hashCode in method HashCode ()

嗨我從封面(靜態工具)得到建議,只在hashCode中使用非最終字段。 為什么我們不能使用非final字段來生成hashCode。 錯誤ID是:MUTABLE_HASH_CODE

我們的想法是,如果兩個對象相等,則它們必須具有相同的哈希碼。 所以進入下一步,你可以說一個對象應該總是具有相同的哈希碼。 顯然,如果在哈希碼計算中使用非最終字段,則哈希碼將不會保持不變。

有關更具體的示例,如果您將一個對象放在一個hashmap中,然后更改該對象,以便hashcode現在在hashmap的錯誤存儲桶中更改該對象。 壞!

hashCode通常用於Hash集合,例如HashSet或HashMap。 如果任何字段更改會改變hashCode,則會使集合處於無效狀態。

出於這個原因,hashCode和equals中使用的字段(如果有的話,還是compareTo)最好只使用final字段。 另一種選擇是僅使用不改變的字段,但這更難檢查和執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM