中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
==和equals方法的區(qū)別是什么?hashCode方法的作用?

先說(shuō)==:

==操作符專門用來(lái)比較兩個(gè)變量的值是否相等,也就是用于比較變量說(shuō)對(duì)應(yīng)的內(nèi)存中所存儲(chǔ)的數(shù)值是否相等.要比較兩個(gè)基本數(shù)據(jù)類型或者兩個(gè)引用變量是夠相等,只用==.

如果一個(gè)變量指向的數(shù)據(jù)是對(duì)象類型,那么就涉及了兩塊內(nèi)存,對(duì)象本身占用一塊堆內(nèi)存,變量也占用一塊內(nèi)存,

例如:Object obj=newObject(); 

obj是一個(gè)內(nèi)存,new Object()是另一個(gè)內(nèi)存.此時(shí)變量obj所對(duì)應(yīng)的內(nèi)存中存儲(chǔ)的數(shù)值占用的那塊內(nèi)存的首地址.

對(duì)于指向?qū)ο箢愋偷淖兞?如果要比較兩個(gè)變量是否指向同一個(gè)對(duì)象,就要看這兩個(gè)變量所對(duì)應(yīng)的內(nèi)存中的數(shù)字是否相等,此時(shí)用==操作符來(lái)進(jìn)行比較.

 

再說(shuō)equals:

它用于比較兩個(gè)獨(dú)立對(duì)象的內(nèi)容是否相等,就好比對(duì)比兩個(gè)人長(zhǎng)相是否相同,他比較的兩個(gè)對(duì)象是獨(dú)立的.

例如: String a=new String(“foo”);    String b=new String(“Foo”);

兩條new語(yǔ)句創(chuàng)建了兩個(gè)對(duì)象,然后用a,b這兩個(gè)變量分別指向了其中的一個(gè)對(duì)象,這是兩個(gè)不同的對(duì)象,他們的首地址是不同的,即,ab中存儲(chǔ)的數(shù)字是不相同的,所以,表達(dá)式a==b返回的是false,而這兩個(gè)對(duì)象同的內(nèi)容是相等的,所以,要用a.equals(b),返回true.

字符串的比較基本上是用equals.

 

額外的一些細(xì)節(jié):

如果一個(gè)類沒(méi)有自己定義equals方法,那么它將繼承Object類的equals方法,Object類的equals方法的實(shí)現(xiàn)代碼如下:

Boolean equals(Object o){return this==o;}

這說(shuō)明,如果一個(gè)類沒(méi)有自己定義equals方法,它默認(rèn)的equals方法(從Object類繼承)就是使用==操作符,也是在比較兩個(gè)變量指向的對(duì)象是否同一個(gè)對(duì)象,使用equals和==會(huì)得到同樣的結(jié)果.若比較的是獨(dú)立的對(duì)象就總返回false.所以一些情況下,需要覆蓋equals方法.

 

然后就是關(guān)于hashCode方法.

hashCode和equals都是用來(lái)判斷2個(gè)對(duì)象是否相等.但他們區(qū)別比較大.

一般來(lái)說(shuō),equals這個(gè)方法是給用戶調(diào)用的,如果你想判斷2個(gè)對(duì)象是否相等,你可以重寫equals方法,然后在代碼中調(diào)用哪個(gè),就可以判斷他們是否相等了,簡(jiǎn)單的來(lái)講,equals方法主要是用來(lái)判斷從表面上看或者從內(nèi)容上看,2個(gè)對(duì)象是否相等.如有個(gè)學(xué)生類,屬性只有姓名和性別,我們可以認(rèn)為只要姓名和性別相等,那么就說(shuō)著2個(gè)對(duì)象是相等的.

Hashcode方法,一般用戶不會(huì)去調(diào)用,比如在hashmap中,由于ket是不可以重復(fù)的,他在判斷ket是不是重復(fù)的時(shí)候就使用了hashcode這個(gè)方法,而且也用到了equals方法,這里不可以重復(fù)是說(shuō)equals和hashcode只要有一個(gè)不等就可以了!所以簡(jiǎn)單來(lái)說(shuō),hashcode相當(dāng)于是一個(gè)對(duì)象的編碼,就好象文件中的md5,他和equals不同就在于他返回的是int型的.比較起來(lái)不直觀.我們一般在覆蓋equals的同時(shí),也要覆蓋hashcode,讓他們的邏輯一致.如上述例子,如果姓名和性別相等,那么hashcode的方法也要返回姓名和性別的hashcode值,這樣從邏輯上,他們就一致了.

==是物理上的判斷是否相等,就是內(nèi)存上判斷.

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
所有類的父類 Java Object
java中Object的默認(rèn)hashCode方法實(shí)現(xiàn)原理
==和equals
java基礎(chǔ)Integer與Integer比較
新手必備Java快速掃盲指南
日常使用主力語(yǔ)言 Java 的基礎(chǔ)知識(shí)整理
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服