【问题标题】:Why program is not printing true in second and third line? [duplicate]为什么程序在第二行和第三行打印不正确? [复制]
【发布时间】:2019-06-27 19:42:45
【问题描述】:

源代码:

public class TestSB{
    public static void main(String args[]){
        String s1="Arnold";
        StringBuffer sb1=new StringBuffer("Arnold");
        StringBuffer sb2=new StringBuffer("Arnold");
        System.out.println(sb1==sb2);
        System.out.println(sb1.equals(sb2)); //should be true but printing false
       System.out.println(sb1.equals(s1)); //should be true but printing false
    }
}

上面是我写的源代码,第 7 行和第 8 行的输出都应该是真的,但它是假的,这背后的原因是什么?

输出:

false
false
false

【问题讨论】:

  • 请使用Tour 并阅读Help Center 中的文档。特别是,您应该阅读关于how to ask a good question 以及on topic 的此类问题。
  • 如果您在格式化代码时遇到问题,SO 有一个markdown help page 可以帮助您。
  • 传递StringBuffer的对象时比较引用,因为StringBuffer没有覆盖Object类的equals方法。
  • 为什么“应该”是true?您是否假设StringBufferString 相同?您是否查看了 StringBuffer 的文档以查看它实现了什么 equals?和所有其他 cmets:问题需要独立存在,文本图像的链接仅比文本图像更糟糕:发布文本。

标签: java string stringbuffer


【解决方案1】:

这是因为 StringBuffer / StringBuilder 不会像您预期的那样覆盖 Object#equals。您应该使用sb1.toString().equals(sb2.toString())sb1.toString().equals(str)SBString 值进行比较。

【讨论】:

    猜你喜欢
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 2019-06-02
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 2021-04-27
    相关资源
    最近更新 更多