【JAVA基础篇】==、equals和hashCode的区别和联系
==
作用:比較兩個(gè)操作數(shù)的關(guān)系,返回一個(gè)boolean類型的結(jié)果
具體含義:如果兩個(gè)操作數(shù)是基本數(shù)據(jù)類型,比較值是否相等。如果兩個(gè)操作數(shù)是引用類型,那么比較的是內(nèi)存地址是否相同。
equals
Object類的實(shí)例方法,剛學(xué)Java的時(shí)候,很多人會(huì)把equals理解成比較內(nèi)容是否相同,這種理解是不準(zhǔn)確的。
我們查看Object.equals的實(shí)現(xiàn):
public boolean equals(Object obj) {return (this == obj);}這明明是比較的內(nèi)存地址好嗎?那為什么會(huì)有很多人說(shuō)equals是比較內(nèi)容呢?
原因是String、Integer、Long很多封裝類重寫(xiě)了equals方法,進(jìn)行內(nèi)容的比較。
hashCode
Object類的本地方法,返回對(duì)象的內(nèi)存地址處理后的結(jié)構(gòu)。同樣的思路,很多封裝類重寫(xiě)了hashCode()方法。
equals和hashCode的區(qū)別和聯(lián)系
set集合是無(wú)序的,因此是不能重復(fù)的,那么怎么能保證不能被放入重復(fù)的元素呢,單靠equals方法進(jìn)行比較的話,如果原來(lái)集合中以后又10000個(gè)元素了,那么放入10001個(gè)元素,難道要將前面的所有元素都進(jìn)行比較,看看是否有重復(fù),歐碼噶的,這個(gè)效率可想而知,因此hashcode 就應(yīng)遇而生了。
所有對(duì)于需要大量并且快速的對(duì)比的話如果都用equal()去做顯然效率太低,所以解決方式是,每當(dāng)需要對(duì)比的時(shí)候,首先用hashCode()去對(duì)比,如果hashCode()不一樣,則表示這兩個(gè)對(duì)象肯定不相等(也就是不必再用equal()去再對(duì)比了),如果hashCode()相同,此時(shí)再對(duì)比他們的equal(),如果equal()也相同,則表示這兩個(gè)對(duì)象是真的相同了,這樣既能大大提高了效率也保證了對(duì)比的絕對(duì)正確性!
通常如果重寫(xiě)了equals方法,也需要重寫(xiě)hashCode方法,并且要保證equals方法返回true時(shí),hashCode()返回的值要相同。
總結(jié)
以上是生活随笔為你收集整理的【JAVA基础篇】==、equals和hashCode的区别和联系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 混凝土墙开洞_新乐专业混凝土切割报价适中
- 下一篇: 信用卡注销1年能恢复吗