重拾Java基础了,StringBuffer由于没有重写equals方法,所以还是使用的Object的equals方法。对比的是两个对象的地址是否相等。而String 由于重写了equals方法,所以可以直接使用equals函数,对比两个对象是否相等。
源码如下:
object类的equals方法:
public boolean equals(Object obj) {
return (this == obj);
}
String 类重写的equals方法:
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;
}```
测试代码
public class Test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
StringBuffer sBuffer = new StringBuffer("1111");
StringBuffer sBuffer2 = new StringBuffer("1111");
String string = new String("1111");
String string2 = new String("1111");
System.out.println(sBuffer.equals(sBuffer2));
System.out.println(string.equals(string2));
}
}
false
true
所以调用stringbuffer的equals方法的时候记得先toString();