Java 字符串缓冲区

标签 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");
    }

  }
}

最佳答案

您正在将 StringBuffer 实例与 String 实例进行比较,这不会因为不同类型而给出所需的结果。请注意,StringBuffer 将使用普通的 Object#equals因为它不会覆盖它(由 StringBuffer JavaDoc 相对于 String#equals 指出,确实覆盖了它)。您必须比较 bufferString 内容,而不是 buffer 变量的对象引用:

if (buffer.toString().equals(newString)) {
    //...
}

此外,从 Java 5 开始,使用 StringBuilder 而不是 StringBuffer 会更好。有关此的更多信息:Difference between StringBuilder and StringBuffer

关于Java 字符串缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17553550/

相关文章:

java - 在 Java 中检索存储的首选项

java - 方法总是返回空列表

java - 如何使用 Retrofit 找到正确的端点以将 JSON 对象 POST 到 JSONbin

Java Swing 屏幕 Artifact

java - Java 时间计算 2 个日期之间的月份的错误

java - 使用 Java 和 Google 的 Firestore 运行查询时没有输出

java - 内部文件服务器设计模式?

java - 在 Javafx 中将字段绑定(bind)到 Controller

java - java中字符串的正则表达式

java - IvParameterSpec 和 GCMParameterSpec 与 AES/GCM/NoPadding 的区别