0

我创建了两个 StringBuffer 如下

StringBuffer buffer1 = new StringBuffer("Text");
StringBuffer buffer2 = new StringBuffer(buffer1);

如果将那些 StringBuffer 与 equals 方法进行比较,那么它返回 false?

if (buffer1.equals(buffer2))
    System.out.println("true");
else
    System.out.println("false");

equals() 比较字符串的内容。所以,我不知道这里返回 false 的原因是什么......

请指导我摆脱这个问题?

4

3 回答 3

5

StringBuffer.equals()不比较字符串内容。你必须做toString().equals()

于 2012-04-26T10:00:32.197 回答
3

你应该使用toString().

if (buffer1.toString()
          .equals(buffer2.toString()))
      System.out.println("true");
else
      System.out.println("false");
于 2012-04-26T10:02:19.353 回答
3

您正在比较对象而不是文本。buffer1 与 buffer2 不同

阅读equals方法的JDK参考

equals 方法在非空对象引用上实现等价关系:

它是自反的:对于任何非空引用值 x,x.equals(x) 应该返回 true。它是对称的:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应该返回 true。它是可传递的:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true 并且 y.equals(z) 返回 true,则 x.equals(z) 应该返回 true。它是一致的:对于任何非空引用值 x 和 y,x.equals(y) 的多次调用始终返回 true 或始终返回 false,前提是没有修改对象上 equals 比较中使用的信息。对于任何非空引用值 x,x.equals(null) 应该返回 false。Object 类的 equals 方法实现了对象上最有区别的可能等价关系;也就是说,对于任何非空引用值 x 和 y,

请注意,每当重写该方法时,通常都需要重写 hashCode 方法,以维护 hashCode 方法的一般约定,即相等的对象必须具有相等的哈希码。

于 2012-04-26T10:04:54.680 回答