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");
}
}
}
最佳答案
您正在将 StringBuffer
实例与 String
实例进行比较,这不会因为不同类型而给出所需的结果。请注意,StringBuffer
将使用普通的 Object#equals
因为它不会覆盖它(由 StringBuffer
JavaDoc 相对于 String#equals
指出,确实覆盖了它)。您必须比较 buffer
的 String
内容,而不是 buffer
变量的对象引用:
if (buffer.toString().equals(newString)) {
//...
}
此外,从 Java 5 开始,使用 StringBuilder
而不是 StringBuffer
会更好。有关此的更多信息:Difference between StringBuilder and StringBuffer
关于Java 字符串缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17553550/