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

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

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

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

所有類(lèi)默認(rèn)繼承Object類(lèi) 先看一下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方法比較的是'=='比較
	//基本類(lèi)型比較的是兩者的值是否相同 而引用類(lèi)型比較兩者的是引用地址(對(duì)象)是否相同
	public boolean equals(Object obj) {
		return (this == obj);
    }
}

結(jié)論

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

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

回到剛剛哪個(gè)問(wèn)題 為什么重寫(xiě)equals還要重寫(xiě)hashCode()?

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

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類(lèi)中的規(guī)范如果不同時(shí)重寫(xiě)將會(huì)導(dǎo)致很多類(lèi)庫(kù)出現(xiàn)業(yè)務(wù)不一致!
	例如HashMap無(wú)法保證key值'唯一性'
	下面測(cè)試代碼p1和p2雖然地址不同 但是業(yè)務(wù)上看內(nèi)容是相同的
	所以應(yīng)該只用一個(gè)key表示 但是不重寫(xiě)將無(wú)法正確插入!
	*/
}
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中為什么重寫(xiě)equals()也需要重寫(xiě)hashCode()?的文章就介紹到這了,更多相關(guān)Java 重寫(xiě)equals()為什么重寫(xiě)hashCode()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 圖文講解IDEA中根據(jù)數(shù)據(jù)庫(kù)自動(dòng)生成實(shí)體類(lèi)

    圖文講解IDEA中根據(jù)數(shù)據(jù)庫(kù)自動(dòng)生成實(shí)體類(lèi)

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

    Java BeanDefination接口詳細(xì)講解

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

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

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

    SpringBoot自動(dòng)配置原理詳解

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

    SpringBoot搭建全局異常攔截

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

    springboot之Validation參數(shù)校驗(yàn)詳細(xì)解讀

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

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

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

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

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

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

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

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

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

最新評(píng)論

九江市| 陈巴尔虎旗| 彩票| 娱乐| 泸定县| 沅江市| 福鼎市| 清镇市| 杂多县| 木兰县| 洪雅县| 大埔县| 铁岭市| 柯坪县| 屯昌县| 读书| 石门县| 偃师市| 平顺县| 宣化县| 梁山县| 淮南市| 福泉市| 华容县| 肥乡县| 兴海县| 海口市| 武陟县| 滕州市| 江达县| 丰城市| 乌鲁木齐市| 军事| 东源县| 洪洞县| 榆树市| 沂水县| 齐齐哈尔市| 金秀| 汉寿县| 遵义县|