- 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值的相關信息,否則會導致內存泄露問題。