StringBuffer如何在内部处理字符串?我尝试运行下面的例子并得到答案为"字符串是不相等的".
据我所知,如果两个字符串具有相同的值,则equals()返回true.那么在这种情况下发生了什么?
class StringBufferTest {
public static void main(String[] args) {
String newString = "HelloWorld";
StringBuffer buffer = new StringBuffer(newString);
if (buffer.equals(newString)) {
System.out.println("Strings are equal");
} else {
System.out.println("String are unequal");
}
}
}
Run Code Online (Sandbox Code Playgroud)
您正在将实例StringBuffer与实例进行比较String,这将不会为不同类型提供所需的结果.请注意,StringBuffer将使用普通的Object#equals,因为它没有覆盖它(由著名StringBuffer的JavaDoc对String#equals,确实覆盖了它).您必须比较变量的对象引用的String内容,而buffer不是buffer:
if (buffer.toString().equals(newString)) {
//...
}
Run Code Online (Sandbox Code Playgroud)
此外,从Java 5开始,最好使用StringBuilder而不是StringBuffer.有关更多信息:StringBuilder和StringBuffer之间的区别