hashcode()用於計算該物件的雜湊值,當以雜湊表為底層資料結構儲存資料時,就需要用到雜湊值,如hashset,hashmap等集合容器。
hashcode() 與 equals() 為什麼要一起重寫呢?
通常,是基於這樣的考慮:
如果該物件使用雜湊表的進行儲存,那麼需要通過hashcode()計算雜湊碼,得到物件的位址,當位址相同時,就需要進一步呼叫該物件的equals()來比較內容是否相同。
因此,才推薦將2個方法一起重寫,在使用hash結構的集合儲存時,才不會出現問題。
自定義雜湊值的計算方式---複寫hashcode()
自定義物件是否相同的比較規則---複寫equals()
物件之間的比較,可以比較位址,也可以自定義比較規則
== 比較的是物件在記憶體中的位址是否相同,位址相同,則物件一定相同
equals 比較的內容,由equals方法內部指定,可以比較位址(object基類中的預設實現),也可以自定義比較規則,因此,equals方法提供了物件之間比較的擴充套件功能。
比如,string類複寫了object基類中的equals()
public boolean equals(object anobject)
if (anobject instanceof string)
return true;}}
return false;
}
字串比較時,使用==與equals()進行比較的區別
public class test
}
通過複寫equals(),自定義物件是否相同的比較規則
public class person
public person(string name)
@override
public int hashcode()
/*** 自定義person是否相同的比較規則
*/@override
public boolean equals(object obj)
}
public class test
}
java中equals 與 的區別
public class teststring 這個程式真是簡單啊!可是有什麼問題呢?1.來自 string 的憂慮 上面這段程式中,到底有幾個物件呢?可能很多人脫口而出 兩個,s1 和 s2 為什麼?string 是 final 類,它的值不可變。看起來似乎很有道理,那麼來檢測一下吧,稍微改動一下...
Java中 與equals的區別
equals和 是兩個很容易混淆也是很多初學者容易搞不清的比較 方法 下面舉個例子,大家就一目了然了 比如 integer int1 new integer 1 integer int2 new integer 1 string str1 new string hello string str2 n...
Java中 與 equals的區別
比較的是引用,較equals嚴格,要求兩個比較物件指向同乙個物件的位址。equals 比較的是值相等,可以是兩個不同的物件引用。注意有一點 equals是object物件的成員方法,也就是說我們可以通過重寫equals 改變判斷兩個物件的值相等的標準,完全有可能兩個物件的值理論上不相等 如3!5 通...