String类的equals方法并没有强制转换的功能,也就是说
String a="A";
a.equals('A');//返回false
基本类型如char,判断内容是否相同直接用==,而没有equals方法。
StringBuffer类没有重写equals方法。它的本质就是char的数组,equals方法继承自object,是对内存位置等的比较。因此两个内容相同的stringbuffer、或者内容相同的stringbuffer和string对象进行equals方法的调用,均返回false。
以下为String类对equals方法的重写,可以看到string重写的equals不包括强制类型转换。且比较的本质是对char数组元素逐个的比较。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}