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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

equals与hashcode的区别与联系

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


1."=="與equals的區別與聯系
(1)“==”對于基本數據類型,只要值相等,就返回true,否則返回false。

?????????若比較的為對象,則判斷的是兩個對象是否處于同一個內存地址。

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

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

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

?

String 中的equals方法

?

2.equals與hashcode的區別與聯系
在Java中判斷兩個對象是否相等,有兩種方法,一種是通過hashcode,另一種是通過equals

hashCode()方法和equal()方法的作用其實一樣,在Java里都是用來對比兩個對象是否相等一致,那么equal()既然已經能實現對比的功能了,為什么還要hashCode()呢?

??????因為重寫的equal()里一般比較全面比較復雜,這樣效率就比較低,而利用hashCode()進行對比,則只要生成一個hash值進行比較就可以了,效率很高,那么hashCode()既然效率

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

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

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

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

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

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

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

效率也保證了對比的絕對正確性!

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

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。