解決idea默認(rèn)帶的equals和hashcode引起的bug
idea默認(rèn)帶的equals和hashcode引起的bug
最近因規(guī)范需要,統(tǒng)一使用idea,使用的版本為2017.4.
建立一個(gè)實(shí)體類,在添加的時(shí)候,使用idea的快捷鍵自動(dòng)生成了equals和hashcode方法.
選擇2個(gè)屬性進(jìn)行生成


然后往list中添加,結(jié)果一直出現(xiàn)重復(fù)記錄,調(diào)試半天發(fā)現(xiàn)
if(!super.equals(o)) return false;這一句是進(jìn)行引用比較,如果同一個(gè)類,直接返回,導(dǎo)致出現(xiàn)問題。
按理說我選擇屬性進(jìn)行比對(duì),肯定是不可能是相同引用了,所以2017.3.4分版本的自動(dòng)生成equals和hashcode請(qǐng)慎
正確的應(yīng)該如下

關(guān)于equals和hashcode問題
默認(rèn)情況下也就是從超類Object繼承而來的equals方法與‘=='是完全等價(jià)的,比較的都是對(duì)象的內(nèi)存地址,但我們可以重寫equals方法,使其按照我們的需求的方式進(jìn)行比較,如String類重寫了equals方法,使其比較的是字符的序列,而不再是內(nèi)存地址。
hashcode是用于散列數(shù)據(jù)的快速存取,如利用HashSet/HashMap/Hashtable類來存儲(chǔ)數(shù)據(jù)時(shí),都是根據(jù)存儲(chǔ)對(duì)象的hashcode值來進(jìn)行判斷是否相同的。
這樣如果我們對(duì)一個(gè)對(duì)象重寫了euqals,意思是只要對(duì)象的成員變量值都相等那么euqals就等于true,但不重hashcode,那么我們?cè)賜ew一個(gè)新的對(duì)象,當(dāng)原對(duì)象.equals(新對(duì)象)等于true時(shí),兩者的hashcode卻是不一樣的,由此將產(chǎn)生了理解的不一致,如在存儲(chǔ)散列集合時(shí)(如Set類),將會(huì)存儲(chǔ)了兩個(gè)值一樣的對(duì)象。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java C++題解leetcode 1684統(tǒng)計(jì)一致字符串的數(shù)目示例
這篇文章主要為大家介紹了Java C++題解leetcode 1684統(tǒng)計(jì)一致字符串的數(shù)目示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
spring-@Autowired注入與構(gòu)造函數(shù)注入使用方式
這篇文章主要介紹了spring-@Autowired注入與構(gòu)造函數(shù)注入使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
SpringBoot項(xiàng)目中的多數(shù)據(jù)源支持的方法
本篇文章主要介紹了SpringBoot項(xiàng)目中的多數(shù)據(jù)源支持的方法,主要介紹在SpringBoot項(xiàng)目中利用SpringDataJpa技術(shù)如何支持多個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)源,有興趣的可以了解一下2017-10-10
Java Mybatis框架多表操作與注解開發(fā)詳解分析
MyBatis 是一款優(yōu)秀的持久層框架,它支持自定義 SQL、存儲(chǔ)過程以及高級(jí)映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。MyBatis 可以通過簡(jiǎn)單的 XML 或注解來配置和映射原始類型、接口和 Java POJO為數(shù)據(jù)庫(kù)中的記錄2021-10-10
Spring-data-redis操作redis cluster的示例代碼
這篇文章主要介紹了Spring-data-redis操作redis cluster的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-10-10
java使用FuncGPT慧函數(shù)對(duì)Mybatis進(jìn)行一對(duì)一查詢映射處理
這篇文章主要介紹了java使用FuncGPT慧函數(shù)對(duì)Mybatis進(jìn)行一對(duì)一查詢映射處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
SpringSecurity多認(rèn)證器配置多模式登錄自定義認(rèn)證器方式
這篇文章主要介紹了SpringSecurity多認(rèn)證器配置多模式登錄自定義認(rèn)證器方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
解決@NonNull @org.jetbrains.annotations.NotNull報(bào)紅的問題
這篇文章主要介紹了解決@NonNull @org.jetbrains.annotations.NotNull報(bào)紅的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
使用Jmeter進(jìn)行http接口測(cè)試的實(shí)踐
本文主要針對(duì)http接口進(jìn)行測(cè)試,使用Jmeter工具實(shí)現(xiàn)。文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
如何解決Maven打包時(shí)每次都出現(xiàn)Download maven-metadata.xml卡住問題
這篇文章主要介紹了如何解決Maven打包時(shí)每次都出現(xiàn)Download maven-metadata.xml卡住問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05

