为什么程序在第二行和第三行打印不正确?

时间:2019-06-27 19:42:45

标签: java string stringbuffer

源代码:

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行的输出都应该为true,但结果为false,这是什么原因?

输出:

false
false
false

1 个答案:

答案 0 :(得分:0)

这是因为StringBuffer / StringBuilder不会像您期望的那样覆盖Object#equals。您应该使用sb1.toString().equals(sb2.toString())sb1.toString().equals(str)来比较SB作为String的值。