java中的hashcode和equals有什么區(qū)別?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
大連網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,大連網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為大連千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的大連做網(wǎng)站的公司定做!
hashcode:對(duì)象的初始地址的整數(shù)表示
3、Integer類,返回的哈希碼就是Integer對(duì)象里所包含的那個(gè)整數(shù)的數(shù)值,例如Integer i1=new Integer(100),i1.hashCode的值就是100 。由此可見,2個(gè)一樣大小的Integer對(duì)象,返回的哈希碼也一樣。
hashCode是為了提高在散列結(jié)構(gòu)存儲(chǔ)中查找的效率,在線性表中沒有作用。
equals被用來(lái)檢測(cè)兩個(gè)對(duì)象是否相等,即兩個(gè)對(duì)象的內(nèi)容是否相等。
區(qū)別:
一般一個(gè)類的對(duì)象如果會(huì)存儲(chǔ)在HashTable,HashSet,HashMap等散列存儲(chǔ)結(jié)構(gòu)中,那么重寫equals后最好也重寫hashCode,否則會(huì)導(dǎo)致存儲(chǔ)數(shù)據(jù)的不唯一性(存儲(chǔ)了兩個(gè)equals相等的數(shù)據(jù))。而如果確定不會(huì)存儲(chǔ)在這些散列結(jié)構(gòu)中,則可以不重寫hashCode。
若兩個(gè)對(duì)象equals返回true,則hashCode有必要也返回相同的int數(shù)。
若兩個(gè)對(duì)象equals返回false,則hashCode不一定返回不同的int數(shù),但為不相等的對(duì)象生成不同hashCode值可以提高哈希表的性能。
若兩個(gè)對(duì)象hashCode返回相同int數(shù),則equals不一定返回true。
若兩個(gè)對(duì)象hashCode返回不同int數(shù),則equals一定返回false。
同一對(duì)象在執(zhí)行期間若已經(jīng)存儲(chǔ)在集合中,則不能修改影響hashCode值的相關(guān)信息,否則會(huì)導(dǎo)致內(nèi)存泄露問(wèn)題。
一般來(lái)說(shuō)涉及到對(duì)象之間的比較大小就需要重寫equals方法。
關(guān)于java中的hashcode和equals有什么區(qū)別問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。