Java String Buffer

ncs*_*cst 0 java

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)

Lui*_*oza 8

您正在将实例StringBuffer与实例进行比较String,这将不会为不同类型提供所需的结果.请注意,StringBuffer将使用普通的Object#equals,因为它没有覆盖它(由著名StringBuffer的JavaDocString#equals,确实覆盖了它).您必须比较变量的对象引用的String内容,而buffer不是buffer:

if (buffer.toString().equals(newString)) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

此外,从Java 5开始,最好使用StringBuilder而不是StringBuffer.有关更多信息:StringBuilder和StringBuffer之间的区别