日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

equals与hashcode的区别与联系

發(fā)布時(shí)間:2023/12/10 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 equals与hashcode的区别与联系 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


1."=="與equals的區(qū)別與聯(lián)系
(1)“==”對(duì)于基本數(shù)據(jù)類型,只要值相等,就返回true,否則返回false。

?????????若比較的為對(duì)象,則判斷的是兩個(gè)對(duì)象是否處于同一個(gè)內(nèi)存地址。

(2)equals為Object類中的方法,Object中equals默認(rèn)使用==來判斷,因此一般來講equals與“==”并無區(qū)別,完全相同。

????????Object是所有類的父類,在不少類中都對(duì)equals進(jìn)行了重寫,比如最常用的String類,因此在String中比較的是值,而非地址。

????????基本類型的包裝類型,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用變量,==是比較地址的,而equals是比較內(nèi)容的

?

String 中的equals方法

?

2.equals與hashcode的區(qū)別與聯(lián)系
在Java中判斷兩個(gè)對(duì)象是否相等,有兩種方法,一種是通過hashcode,另一種是通過equals

hashCode()方法和equal()方法的作用其實(shí)一樣,在Java里都是用來對(duì)比兩個(gè)對(duì)象是否相等一致,那么equal()既然已經(jīng)能實(shí)現(xiàn)對(duì)比的功能了,為什么還要hashCode()呢?

??????因?yàn)橹貙懙膃qual()里一般比較全面比較復(fù)雜,這樣效率就比較低,而利用hashCode()進(jìn)行對(duì)比,則只要生成一個(gè)hash值進(jìn)行比較就可以了,效率很高,那么hashCode()既然效率

這么高為什么還要equal()呢?

?????因?yàn)閔ashCode()并不是完全可靠,有時(shí)候不同的對(duì)象他們生成的hashcode也會(huì)一樣(生成hash值得公式可能存在的問題),所以hashCode()只能說是大部分時(shí)候可靠,并不是絕對(duì)

可靠,所以我們可以得出:

?????????1.equal()相等的兩個(gè)對(duì)象他們的hashCode()肯定相等,也就是用equal()對(duì)比是絕對(duì)可靠的。

?????????2.hashCode()相等的兩個(gè)對(duì)象他們的equal()不一定相等,也就是hashCode()不是絕對(duì)可靠的。

?????所有對(duì)于需要大量并且快速的對(duì)比的話如果都用equal()去做顯然效率太低,所以解決方式是,每當(dāng)需要對(duì)比的時(shí)候,首先用hashCode()去對(duì)比,如果hashCode()不一樣,則表示這兩

個(gè)對(duì)象肯定不相等(也就是不必再用equal()去再對(duì)比了),如果hashCode()相同,此時(shí)再對(duì)比他們的equal(),如果equal()也相同,則表示這兩個(gè)對(duì)象是真的相同了,這樣既能大大提高了

效率也保證了對(duì)比的絕對(duì)正確性!

?????這種大量的并且快速的對(duì)象對(duì)比一般使用的hash容器中,比如hashset,hashmap,hashtable等等,比如hashset里要求對(duì)象不能重復(fù),則他內(nèi)部必然要對(duì)添加進(jìn)去的每個(gè)對(duì)象進(jìn)行對(duì)

比,而他的對(duì)比規(guī)則就是像上面說的那樣,先hashCode(),如果hashCode()相同,再用equal()驗(yàn)證,如果hashCode()都不同,則肯定不同,這樣對(duì)比的效率就很高了。

總結(jié)

以上是生活随笔為你收集整理的equals与hashcode的区别与联系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。