默認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是一個本地方法,他返回的是這個對象的內存地址。
知道了這些之後我們接着往下看。