【问题标题】:How equals() method work in String Buffer? [duplicate]字符串缓冲区中的 equals() 方法如何工作? [复制]
【发布时间】:2017-06-21 04:27:49
【问题描述】:

我在 netbeans 中尝试了以下代码,我收到的输出值为 false 我想知道 equal() 的实际工作原理。

我的代码是:

StringBuffer x=new StringBuffer("Hey");
StringBuffer y=new StringBuffer("Hey");
System.out.println(x.equals(y));    // my output was false

【问题讨论】:

  • StringBuffer 不会覆盖 equals(即它正在比较引用)

标签: java string netbeans equals stringbuffer


【解决方案1】:

看源码*.

你会看到它只是调用了Objectequals

public boolean equals(Object obj) {
    return (this == obj);
}

还可以考虑使用StringBuilder,参见Difference between StringBuilder and StringBuffer

* 如果使用 Eclipse ctrl-click 对象并且源代码已加载到您的系统中,它将带您到那里

【讨论】:

    【解决方案2】:

    您是在比较对象,而不是字符串。而那些并不相等。 在两个 Stringbuffers 上调用 toString() 并比较结果字符串。

    【讨论】:

      【解决方案3】:

      它会比较天气两个对象是否等于“this” 例子 它是自反的:对于任何非空引用值 x,x.equals(x) 应该返回 true

      【讨论】:

      • 添加一些参考代码或示例以提高答案的可读性。
      【解决方案4】:

      StringBuffer 不会覆盖Object.equals 方法,因此它不会执行字符串比较。相反,它正在执行直接的对象比较。您的条件也可能是if(s1==s2)。如果要比较字符串,则需要先将缓冲区转换为字符串。

      http://java.sun.com/j2se/1.5.0/docs/api/java/lang/StringBuffer.html

      编辑:我假设我们处于 Java 世界中。如果您在单线程环境中,或者您的缓冲区被隔离到单个线程,您应该使用StringBuilder 而不是StringBuffer

      Does the StringBuffer equals method compare content?

      【讨论】:

      • 您应该将问题标记为重复,而不是将链接作为答案发布。无论如何,仅链接的答案都不是好的答案。
      • 感谢您的建议,从现在开始我会这样做..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 2015-10-29
      相关资源
      最近更新 更多