1. 程式人生 > >java hashCode, 引用以及equals().

java hashCode, 引用以及equals().

重復 對象 如果 contain 定義 返回 contains new java

hashCode是每一個對象都有的hash碼,是HashSet中用來分配對象存儲的標識。每一個equal的對象都要有相同的hashCode。所以重寫equals方法,必重寫hashCode()。

引用相同,hashCode一定相同。而反之,未必。因為hashCode是和equals()關聯起來的,而我們都知道equals()比較的是值,而非引用。

HashSet中判斷重復元素靠的是equals(),也就是hashCode(),而不是對象引用。

舉例來說:
String s1 = new String("abc");

String s2 = new String("abc");

這兩個對象引用不同,但hashCode是一樣的。

如果我們定義一個HashSet<String>:

HashSet<String> hs = new HashSet<>();

hs.add(s1);

那麽hs.contains(s2), 也將返回true。因為HashSet判斷重復元素靠的是hashCode,而非引用。

java hashCode, 引用以及equals().