Java基礎 9.equals和hashcode的聯繫以及和==的區別

  • equals與==的區別

==比較的是2個對象的地址,而equals比較的是2個對象的內容,顯然,當equals爲true時,==不一定爲true。==操作比較的是兩個變量的值是否相等,對於引用型變量表示的是兩個變量在堆中存儲的地址是否相同,即棧中的內容是否相同。

  equals操作表示的兩個變量是否是對同一個對象的引用,即堆中的內容是否相同。

 

  • hashCode和equals方法的區別與聯繫

         equal()相等的兩個對象他們的hashCode()肯定相等,也就是用equal()對比是絕對可靠的。

          hashCode()相等的兩個對象他們的equal()不一定相等,也就是hashCode()不是絕對可靠的。

 1.hashCode是爲了提高在散列結構存儲中查找的效率,在線性表中沒有作用。

       2.equals和hashCode需要同時覆蓋。

       3.若兩個對象equals返回true,則hashCode有必要也返回相同的int數。

       4.若兩個對象equals返回false,則hashCode不一定返回不同的int數,但爲不相等的對象生成不同hashCode值可以提高哈希表的性能。

       5.若兩個對象hashCode返回相同int數,則equals不一定返回true。

       6.若兩個對象hashCode返回不同int數,則equals一定返回false。

       7.同一對象在執行期間若已經存儲在集合中,則不能修改影響hashCode值的相關信息,否則會導致內存泄露問題。

發佈了32 篇原創文章 · 獲贊 4 · 訪問量 1927
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章