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;
}