java中==锋谐、equals和hashcode的區(qū)別

1.==

1.“==”用來判斷基本數(shù)據(jù)類型(byte,short,char,int,long,float,double,boolean)的時(shí)候,判斷的是它們的值是否相同鼓择,例如

2."=="用來判斷引用類型(類摆出、接口朗徊、數(shù)組)的時(shí)候,判斷的是內(nèi)存中的存放地址是否相同(是否引用同一個(gè)對象),例如

自定義變量str1象踊、str2會(huì)首先去java內(nèi)存尋找字段“aaa”,如果存在字段“aaa”則引用該地址逆害,如果沒有則創(chuàng)建新的空間存儲(chǔ)字段坛芽,所以str1 == str2返回true翼抠。

new一個(gè)新的對象str3咙轩、str4活喊,不論java內(nèi)存中有沒有字段“aaa”量愧,都會(huì)創(chuàng)建新的空間存儲(chǔ)字段钾菊,所以str1 == str3、str3 == str4返回true偎肃。

2.equals

1.調(diào)用Object類的equals方法的時(shí)候煞烫,比較的是內(nèi)存中的存放地址是否相同(是否引用同一個(gè)對象),此時(shí)的equals作用和“==”是相同的

2.JDK中累颂,String红竭、Long等封裝類都對equals()方法進(jìn)行了重寫,所以在使用的時(shí)候需要根據(jù)代碼來確定equals()的作用。重寫后的equals()方法一般都是用來判斷兩個(gè)對象的內(nèi)容是否相同

String類中的equals()方法的重寫
Long類中的equals()方法的重寫

當(dāng)我們需要對equals()方法進(jìn)行重寫茵宪,判斷兩個(gè)實(shí)例對象的內(nèi)容是否相同的時(shí)候,對于equals重寫需要注意五點(diǎn):

1. 自反性:對任意引用值x瘦棋,x.equals(x)的返回值一定為true.

2.對稱性:對于任何引用值x,y,當(dāng)且僅當(dāng)y.equals(x)返回值為true時(shí)稀火,x.equals(y)的返回值一定為true;

3.傳遞性:如果x.equals(y)=true, y.equals(z)=true,則x.equals(z)=true

4 .一致性:如果參與比較的對象沒任何改變,則對象比較的結(jié)果也不應(yīng)該有任何改變

5.非空性:任何非空的引用值X赌朋,x.equals(null)的返回值一定為false

3.hashcode

hashCode()方法返回一個(gè)數(shù)值凰狞,該數(shù)值是根據(jù)哈希算法將該對象的內(nèi)部地址轉(zhuǎn)換成一個(gè)整數(shù)返回也叫做哈希碼。

1.hash碼的作用

主要作用是配合基于散列的集合(HashSet沛慢、HashMap以及HashTable)一起正常運(yùn)行赡若,來提高運(yùn)行效率。例如:

向HashTable中插入-條數(shù)據(jù)团甲,使用equals逐條進(jìn)行比較可行逾冬,但如果數(shù)據(jù)量過大會(huì)大大減低效率。hashcode很好的解決了這個(gè)問題躺苦,首先會(huì)調(diào)用hashCode方法得到對應(yīng)的hashcode值身腻,然后查找是否有該hashcode值,如果沒有該hashcode值匹厘,它就可以直接存進(jìn)去嘀趟,不用再進(jìn)行任何比較了;如果存在該hashcode值愈诚,就調(diào)用它的equals方法進(jìn)行比較她按,相同的話就不存入該數(shù)據(jù),不相同就存入該數(shù)據(jù)炕柔,HashTable中put方法:

HashTable類中的put方法


獲取hashcode

注:由于不同對象可能會(huì)產(chǎn)生相同的hashcode值酌泰,所以不能通過hashcode直接判斷兩個(gè)對象是否相同,但是可以直接根據(jù)hashcode值判斷兩個(gè)對象不等汗唱,如果兩個(gè)對象的hashcode值不等宫莱,則必定是兩個(gè)不同的對象。如果要判斷兩個(gè)對象是否真正相等哩罪,必須通過equals方法授霸。

2.equals()和hashcode()關(guān)系

1).重寫equals()方法的時(shí)候,需要重寫hashcode()方法际插;

2).若兩個(gè)對象equals相同碘耳,則hashCode一定相同;

3).若兩個(gè)對象equals不相同框弛,hashCode不一定不相同辛辨;

4).若兩個(gè)對象hashCode相同,equals不一定相同;

5).若兩個(gè)對象hashCode不相同斗搞,equals一定不相同指攒;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市僻焚,隨后出現(xiàn)的幾起案子允悦,更是在濱河造成了極大的恐慌,老刑警劉巖虑啤,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隙弛,死亡現(xiàn)場離奇詭異,居然都是意外死亡狞山,警方通過查閱死者的電腦和手機(jī)全闷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萍启,“玉大人总珠,你說我怎么就攤上這事∫猎迹” “怎么了姚淆?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長屡律。 經(jīng)常有香客問我腌逢,道長,這世上最難降的妖魔是什么超埋? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任搏讶,我火速辦了婚禮,結(jié)果婚禮上霍殴,老公的妹妹穿的比我還像新娘媒惕。我一直安慰自己,他們只是感情好来庭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布妒蔚。 她就那樣靜靜地躺著,像睡著了一般月弛。 火紅的嫁衣襯著肌膚如雪肴盏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天帽衙,我揣著相機(jī)與錄音菜皂,去河邊找鬼。 笑死厉萝,一個(gè)胖子當(dāng)著我的面吹牛恍飘,可吹牛的內(nèi)容都是我干的榨崩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼章母,長吁一口氣:“原來是場噩夢啊……” “哼母蛛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乳怎,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤溯祸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后舞肆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡博杖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年椿胯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剃根。...
    茶點(diǎn)故事閱讀 39,769評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哩盲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狈醉,到底是詐尸還是另有隱情廉油,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布苗傅,位于F島的核電站抒线,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏渣慕。R本人自食惡果不足惜嘶炭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逊桦。 院中可真熱鬧眨猎,春花似錦、人聲如沸强经。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匿情。三九已至兰迫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間码秉,已是汗流浹背逮矛。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留转砖,地道東北人须鼎。 一個(gè)月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓鲸伴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親晋控。 傳聞我的和親對象是個(gè)殘疾皇子汞窗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容