“==”:
==是運(yùn)算符,用來(lái)? ? 比較兩個(gè)值是否相等(基本數(shù)據(jù)類型)、比較兩個(gè)對(duì)象的內(nèi)存地址是否相等(對(duì)象);
“equals()”:
equals是Object類的方法,默認(rèn)情況下比較兩個(gè)對(duì)象是否是同一個(gè)對(duì)象(內(nèi)存地址是否相等),內(nèi)部實(shí)現(xiàn)是通過“==”來(lái)實(shí)現(xiàn)的。
如果想比較兩個(gè)對(duì)象的其他內(nèi)容,則可以通過重寫equals方法,
例如:String類就重寫了equals方法,改成了對(duì)象的內(nèi)容是否相等。
“hashCode()”:
hashCoed也是Object類里面的方法,返回值是一個(gè)對(duì)象的哈希碼,同一個(gè)對(duì)象哈希碼一定相等,但不同對(duì)象哈希碼也有可能相等。
如果兩個(gè)對(duì)象通過equals方法比較相等,那么他的hashCode一定相等;
如果兩個(gè)對(duì)象通過equals方法比較不相等,那么他的hashCode有可能相等;
例如以下程序:
class Untitled {
? ? publicstaticvoid main(String[] args) {
? ? ? ? System.out.println("AaAa".hashCode());//2031744
????????System.out.println("BBBB".hashCode());//2031744??
? ? ?}
}
!在每個(gè)覆蓋了equals方法的類中,也必須覆蓋hashCode方法,如果不這樣做的話,就會(huì)違反Object.hashCode的通用約定。從而導(dǎo)致該類無(wú)法結(jié)合所有基于散列的集合一起正常運(yùn)作。