Hashcode相同但是equals不同的例子

2021-09-11 10:13:10 字數 1205 閱讀 3635

大家都知道equals()相同時hashcode必須相同 但是hashcode相同並不一定eqauls但是具體的例子還真沒看過 我們可以看到string 的hashcode()方法如下

public int hashcode

() this.hash = var1;

}return var1;

}複製**

這裡我用我的姓的拼音來演示下馬(ma)在ascii表中我們可以找到ma和編碼分別是7766這樣算的就是(31*0+77)*31+66資料有點少看不出來規律 再加上我的名林(lin)7669110這樣算起來就是

((((31*0+77)*31+66)*31+76)*31+69)*31+110

複製**

這樣我們就可以總結出來規律啦

31*31(n-1)+str.charat(0)*31(n-2)+str.charat(1)*31(n-3)+...+str.charat(n-1)

複製**

其中的(n-*)代表根次方

這樣我們就可以看出來了 如果構造相鄰倆個最後的和一樣 我們設比較的兩個字串的編碼形式為(x1)(y1)(x2)(y2)他們倆只有中間倆個字元的編碼不一樣 那麼怎麼分別設定這兩個字串才能讓他們的編碼最後相同呢 經過一番高考之前的我附身 我們可以得到以下的等式

最最重要的是

(x1-x2)*31=(y2-y1)

複製**

也就是相鄰的兩位如果前邊的編碼差 1 後邊的兩個的編碼就要差-31*1

倆個例項吧 還是上邊的我的大姓ma有哪個字串是和m(77)a(97)hashcode相同的呢 其中乙個結果竟然為nb(敲黑板)n(78)b(66)看起來我們這個姓比較厲害了

equals和hashcode的重寫

下面給出例項 package xuming class student public student string name,int age,int classnum 重寫equals方法 public boolean equals object o 測試引用o是都為null if o null 測...

equals 和hashCode 的區別

equals 反映的是或變數具體的值,即兩個物件包含的值 可能是物件的引用,也可能是值型別的值 hashcode 計算出物件例項的雜湊碼 根據記憶體位址返回的int型的數值 並返回雜湊碼,又稱為雜湊函式。根據object的hashcode都是唯一的 當然,當物件重寫了hashcode 方法時,結果就...

hashCode 和equals 的區別

hashcode 和equals 都是object類中的方法 hashcode equals 不重寫時 返回的是物件的位址值 用來比較兩個物件的位址值是否相等 重寫後返回的是根據物件的成員變數,計算出的乙個整數 比較的是兩個物件的成員資訊是否相同 兩個物件通過equals 比較是相等的,那hashc...