爲什麼需要重寫equals方法

默認equals在比較兩個對象時,是看他們是否指向同一個地址的。

但有時,希望兩個對象只要是某些屬性相同就認爲他們的quals爲true。比如:
Student s1 = new Student(1,"name"); Student s2 = new Student(1,"name");
如果不重寫equals的話,他們是不相同的,因爲引用s1和s2指向的堆內存地址顯然不一樣,所以我們要重些equals,
判斷只要他們的id和名字相同equals就爲true,在一些集合裏有時也這樣用,集合裏的contain也是用equals來比較

equals方法和hashCode方法都是Object類中的方法,我們來看看他們的源碼:

public boolean equals(Object obj) {
        return (this == obj);
    }

 

public native int hashCode();

可知,equals方法在其內部是調用了"==",所以說在不重寫equals方法的情況下,equals方法是比較兩個對象是否具有相同的引用,即是否指向了同一個內存地址。

而hashCode是一個本地方法,他返回的是這個對象的內存地址。

知道了這些之後我們接着往下看。

 

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