回覆列表
  • 1 # mad迷路T恤

    equals():反映的是物件或變數具體的值,即兩個物件裡面包含的值--可能是物件的引用,也可能是值型別的值。hashCode():計算出物件例項的雜湊碼,並返回雜湊碼,又稱為雜湊函式。根類Object的hashCode()方法的計算依賴於物件例項的D(記憶體地址),故每個Object物件的hashCode都是唯一的;當然,當物件所對應的類重寫了hashCode()方法時,結果就截然不同了。  之所以有hashCode方法,是因為在批次的物件比較中,hashCode要比equals來得快,很多集合都用到了hashCode,比如HashTable。   兩個obj,如果equals()相等,hashCode()一定相等。  兩個obj,如果hashCode()相等,equals()不一定相等(Hash雜湊值有衝突的情況,雖然機率很低)。所以:  可以考慮在集合中,判斷兩個物件是否相等的規則是:    第一步,如果hashCode()相等,則檢視第二步,否則不相等;    第二步,檢視equals()是否相等,如果相等,則兩obj相等,否則還是不相等。 1、首先equals()和hashcode()這兩個方法都是從object類中繼承過來的。  equals()是對兩個物件的地址值進行的比較(即比較引用是否相同)。  hashCode()是一個本地方法,它的實現是根據本地機器相關的。2、Java語言對equals()的要求如下,這些要求是必須遵循的:  A 對稱性:如果x.equals(y)返回是“true”,那麼y.equals(x)也應該返回是“true”。  B 反射性:x.equals(x)必須返回是“true”。  C 類推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那麼z.equals(x)也應該返回是“true”。  D 一致性:如果x.equals(y)返回是“true”,只要x和y內容一直不變,不管你重複x.equals(y)多少次,返回都是“true”。  任何情況下,x.equals(null),永遠返回是“false”;x.equals(和x不同型別的物件)永遠返回是“false”。3、equals()相等的兩個物件,hashcode()一定相等;  反過來:hashcode()不等,一定能推出equals()也不等;  hashcode()相等,equals()可能相等,也可能不等。

  • 中秋節和大豐收的關聯?
  • 有什麼辦法可以讓痘痘自己消失?