源碼分析 --- Java中爲什麼重寫equals()方法的時候一定要重寫hashCode()方法?

  • 小朋友,是否有很多問號???

  • 零、讀這裏這裏之前,我一定要說的一個觀點。重寫equals()方法一定要重寫hashCode()方法嗎?

    • 我的回答是不一定,也是比較片面的,當我們需求只用到了equals方法去判斷對象是否相同的時候,則就沒必要考慮hashCode()是否一致;

    • 因此這裏的一定?或者不一定?完全看需求,但是整體上爲了代碼專業度、健壯性、balabal來說建議重寫;

    • 與此同時Java的源碼中有相應的結論,要hashCode與equals保持一致的判斷標準,A.equals(B) -> B.hashCode() == A.hashCode();

Note that it is generally necessary to override the {@code hashCode}
* method whenever this method is overridden, so as to maintain the
* general contract for the {@code hashCode} method, which states
* that equal objects must have equal hash codes.
  • 一、什麼是hashCode和equals

  • hashCode()和equals()都是Object類的屬性和方法;

  • hashCode()是對於每一個對象生成一個唯一的hashCode,可能會重複;

  • equals()是判斷兩個對象是否相同;

  • 下面對比的時候equals()的第八條,Java源碼中也是建議,修改Equals方法的時候,要修改hashCode,保證equals相等的時候,ha

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章