Equals方法
該方法默認比較的是連個對象的地址值是否相等。
觀察equals的源碼:
public boolean equals(Object obj) {
return (this == obj); // s1 == s3
}
比較兩個對象比的是地址沒有意義,一般判斷兩個對象是否相等,比較的是對象的成員,所以我們一般自定義對象都需要重寫equals方法
如何重寫? – 學習String的equals方法
觀察String重寫equals方法:
class String {
private final char value[];
"abc".equals("abc");
public boolean equals(Object anObject) {
"abc" == "abd"
// 提高了效率
if (this == anObject) {
return true;
}
// 提高了安全性
if (anObject instanceof String) {
String anotherString = (String)anObject; "abd"
int n = this.value.length; // 3
if (n == anotherString.value.length) {
char v1[] = this.value; "abc"
char v2[] = anotherString.value; "abd"
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++; 2
}
return true;
}
}
return false;
}
}
所以我們可以自己來重寫equals方法,重寫如下
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}