最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中為什么重寫equals()也需要重寫hashCode方法

 更新時間:2023年04月26日 09:43:18   作者:武帥祺  
這篇文章主要介紹了Java中為什么重寫equals()也需要重寫hashCode(),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

Java中為什么重寫equals()也需要重寫hashCode()?

所有類默認(rèn)繼承Object類 先看一下Object源碼

package java.lang;
public class Object {
	//默認(rèn)調(diào)用本地的hashcode()方法 根據(jù)內(nèi)存地址生成hash值 避免不了哈希沖突
	public native int hashCode();
	//默認(rèn)調(diào)用的equals方法比較的是'=='比較
	//基本類型比較的是兩者的值是否相同 而引用類型比較兩者的是引用地址(對象)是否相同
	public boolean equals(Object obj) {
		return (this == obj);
    }
}

結(jié)論

  • equals()返回結(jié)果為true hashCode()一定相同
  • '=='結(jié)果為true hashCode()一定相同
  • '=='結(jié)果為false hashCode()有可能相同(哈希沖突)

hashCode()重寫規(guī)范就是保證equals()相同的兩個對象擁有相同的哈希值

回到剛剛哪個問題 為什么重寫equals還要重寫hashCode()?

關(guān)注公眾號:Java技術(shù)迷,獲取java相關(guān)書籍!

public class per {
    private String name;
    private int age;
    public per(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public boolean equals(Object o){
        if (this==o)return true;
        if (o==null||o.getClass()!=this.getClass())return false;
        per o1 = (per) o;
        return o1.name==name&&o1.name!=null&&o1.name.equals(this.name)&&age=o1.age;
    }
    public int hashCode(){
        return Objects.hash(name,age);
    }
	/*
	這是Object類中的規(guī)范如果不同時重寫將會導(dǎo)致很多類庫出現(xiàn)業(yè)務(wù)不一致!
	例如HashMap無法保證key值'唯一性'
	下面測試代碼p1和p2雖然地址不同 但是業(yè)務(wù)上看內(nèi)容是相同的
	所以應(yīng)該只用一個key表示 但是不重寫將無法正確插入!
	*/
}
class Example{
    public static void main(String[] args) {
        per p1 = new per("張三", 18);
        per p2 = new per("張三", 18);
        HashMap<per,Integer> map = new HashMap<>();
        map.put(p1,1);
        map.put(p2,2); //具體原理可以看put(k,v)源碼!
    }
}

到此這篇關(guān)于Java中為什么重寫equals()也需要重寫hashCode()?的文章就介紹到這了,更多相關(guān)Java 重寫equals()為什么重寫hashCode()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 圖文講解IDEA中根據(jù)數(shù)據(jù)庫自動生成實體類

    圖文講解IDEA中根據(jù)數(shù)據(jù)庫自動生成實體類

    這篇文章主要以圖文講解IDEA中根據(jù)數(shù)據(jù)庫自動生成實體類,本文主要以Mysql數(shù)據(jù)庫為例,應(yīng)該會對大家有所幫助,如果有錯誤的地方,還望指正
    2023-03-03
  • Java BeanDefination接口詳細講解

    Java BeanDefination接口詳細講解

    BeanDefinition是spring里面bean的一個建模對象,就相當(dāng)于class對象是普通java對象的建模對象一樣??赡茉趕pring作用的各種業(yè)務(wù)場景中,class對象并不能完成spring對bean的抽象,所以弄了一個BeanDefinition作為bean的抽象建模對象
    2022-11-11
  • java實現(xiàn)圖片寫入高清字體及帶邊框的方法

    java實現(xiàn)圖片寫入高清字體及帶邊框的方法

    這篇文章主要介紹了java實現(xiàn)圖片寫入高清字體及帶邊框的方法,涉及java針對圖片及文字的相關(guān)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • SpringBoot自動配置原理詳解

    SpringBoot自動配置原理詳解

    SpringBoot的誕生就是為了簡化Spring中繁瑣的XML配置,其本質(zhì)依然還是Spring框架,使用SpringBoot之后可以不使用任何XML配置來啟動一個服務(wù),使得我們在使用微服務(wù)架構(gòu)時可以更加快速的建立一個應(yīng)用。本文將為具體介紹一下SpringBoot的原理,需要的可以參考一下
    2021-12-12
  • SpringBoot搭建全局異常攔截

    SpringBoot搭建全局異常攔截

    這篇文章主要介紹了SpringBoot搭建全局異常攔截,本文通過詳細的介紹與代碼的展示,詳細的說明了如何搭建該項目,包括創(chuàng)建,啟動和測試步驟,需要的朋友可以參考下
    2021-06-06
  • springboot之Validation參數(shù)校驗詳細解讀

    springboot之Validation參數(shù)校驗詳細解讀

    這篇文章主要介紹了springboot之Validation參數(shù)校驗詳細解讀,本篇是關(guān)于springboot的參數(shù)校驗知識,當(dāng)然也適用其它java應(yīng)用,讀完本篇將學(xué)會基本的參數(shù)校驗,自定義參數(shù)校驗和分組參數(shù)校驗,需要的朋友可以參考下
    2023-10-10
  • java提供的4種函數(shù)式接口

    java提供的4種函數(shù)式接口

    這篇文章主要介紹了java提供的4種函數(shù)式接口,函數(shù)接口是只有一個抽象方法的接口,用作?Lambda?表達式的類型并有且只有一個抽象方法的接口,下文詳細內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • Spring Boot項目添加外部Jar包以及配置多數(shù)據(jù)源的完整步驟

    Spring Boot項目添加外部Jar包以及配置多數(shù)據(jù)源的完整步驟

    這篇文章主要給大家介紹了關(guān)于Spring Boot項目添加外部Jar包以及配置多數(shù)據(jù)源的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java 讀取、獲取配置文件.properties中的數(shù)據(jù)

    Java 讀取、獲取配置文件.properties中的數(shù)據(jù)

    這篇文章主要介紹了Java 讀取、獲取配置文件.properties中的數(shù)據(jù),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • idea生成類注釋和方法注釋的正確方法(推薦)

    idea生成類注釋和方法注釋的正確方法(推薦)

    這篇文章主要介紹了idea生成類注釋和方法注釋的正確方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11

最新評論

元阳县| 玉屏| 易门县| 南充市| 金昌市| 治多县| 郑州市| 东乡族自治县| 玉林市| 岗巴县| 东乌珠穆沁旗| 亳州市| 阿合奇县| 余江县| 宁安市| 涿州市| 和顺县| 宁陵县| 正宁县| 勃利县| 荔浦县| 博爱县| 独山县| 华安县| 三河市| 南乐县| 黄大仙区| 茂名市| 息烽县| 策勒县| 百色市| 长白| 琼结县| 简阳市| 城步| 景宁| 香港| 东光县| 余庆县| 黔西县| 牡丹江市|