1.“==”
“==”運(yùn)算符用來比較兩個(gè)變量的值是否相等碧磅,即用于比較變量對(duì)應(yīng)的內(nèi)存中所存儲(chǔ)的數(shù)值是否相同。
如果兩個(gè)變量都是基本數(shù)據(jù)類型遵馆,可以直接使用“==”運(yùn)算符來比較其對(duì)應(yīng)的值是否相等鲸郊。
如果一個(gè)變量是對(duì)象,那么這個(gè)對(duì)象涉及了兩塊內(nèi)存货邓,例如String s = new String(); 秆撮, 變量s占用了棧內(nèi)存,而new String()則存儲(chǔ)在堆內(nèi)存中换况,變量s所對(duì)應(yīng)的內(nèi)存中存儲(chǔ)的數(shù)值就是new String()所占用的堆內(nèi)存的首地址像吻。
要比較兩個(gè)對(duì)象是否是同一對(duì)象,即要看這兩個(gè)對(duì)象的值是否相等(是否指向同一個(gè)堆內(nèi)存地址)复隆,就可以用”==“運(yùn)算符比較拨匆。但是要比較這兩個(gè)對(duì)象的內(nèi)容是否相等,”==“運(yùn)算符無法實(shí)現(xiàn)挽拂。
2.equals
equals是Object類提供的方法之一惭每。所以每一個(gè)對(duì)象都有equals方法。Object類中定義的equals方法是直接使用”==“運(yùn)算符比較兩個(gè)對(duì)象亏栈。所以在沒覆蓋equals方法的情況下台腥,equals與”==“運(yùn)算符一樣,比較的是引用绒北。
String類重寫了equals方法黎侈,比較的是兩個(gè)對(duì)象的值
3.hashCode()
hashCode()繼承至Object類。Object類的hashCode()方法返回對(duì)象在內(nèi)存轉(zhuǎn)換成的一個(gè)int值闷游,峻汉,所以如果沒重寫hashCode()方法,任何對(duì)象的hashCode()方法都是不相等的脐往。
hashCode()方法一般不會(huì)去調(diào)用它休吠,其主要作用是配合集合使用。例如在hashmap中业簿,key是不可重復(fù)的瘤礁,它在判斷key是否重復(fù)時(shí)就判斷了hashCode()這個(gè)方法,而且也用到了equals()方法梅尤」袼迹”不可重復(fù)“指的是equals()與hashCode()只要有一個(gè)不等就可以了岩调。
所以hashCode()相當(dāng)于給每個(gè)對(duì)象一個(gè)編碼。