溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決idea中默認equals和hashcode引起的bug

發布時間:2021-07-27 13:49:41 來源:億速云 閱讀:247 作者:小新 欄目:開發技術

小編給大家分享一下如何解決idea中默認equals和hashcode引起的bug,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

idea默認帶的equals和hashcode引起的bug

最近因規范需要,統一使用idea,使用的版本為2017.4.

建立一個實體類,在添加的時候,使用idea的快捷鍵自動生成了equals和hashcode方法.

選擇2個屬性進行生成

如何解決idea中默認equals和hashcode引起的bug

如何解決idea中默認equals和hashcode引起的bug

然后往list中添加,結果一直出現重復記錄,調試半天發現

if(!super.equals(o)) return false;這一句是進行引用比較,如果同一個類,直接返回,導致出現問題。

按理說我選擇屬性進行比對,肯定是不可能是相同引用了,所以2017.3.4分版本的自動生成equals和hashcode請慎

正確的應該如下

如何解決idea中默認equals和hashcode引起的bug

關于equals和hashcode問題

默認情況下也就是從超類Object繼承而來的equals方法與‘=='是完全等價的,比較的都是對象的內存地址,但我們可以重寫equals方法,使其按照我們的需求的方式進行比較,如String類重寫了equals方法,使其比較的是字符的序列,而不再是內存地址。

hashcode是用于散列數據的快速存取,如利用HashSet/HashMap/Hashtable類來存儲數據時,都是根據存儲對象的hashcode值來進行判斷是否相同的。

這樣如果我們對一個對象重寫了euqals,意思是只要對象的成員變量值都相等那么euqals就等于true,但不重hashcode,那么我們再new一個新的對象,當原對象.equals(新對象)等于true時,兩者的hashcode卻是不一樣的,由此將產生了理解的不一致,如在存儲散列集合時(如Set類),將會存儲了兩個值一樣的對象。

以上是“如何解決idea中默認equals和hashcode引起的bug”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女