关于 “==” 和 “equals”:
1) 对于Object类来说 “==” 和 “equals” 是等价的,判断引用是否指向同一个对象。
API 实现:public boolean equals(Object obj) {
return (this == obj);
}
2)对于String类来说,“equals” 方法重写了Object类的“equals”,
可以用来比较两个String类型的字面值是否相等,而不只是判断是否指向同一个对象。
API实现:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
// 向下类型转换,重要
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
3)对于其它没有重写父类Object中equals方法的类来说,
“==” 和 "equals"一样。而对于有重写的equals的类来说,
就要看具体的实现了。
所以不能笼统地说:“==”是用来比较引用是否相等,"equals"用来比较值是否相等。