StringBuilder .equals Java

Und*_*Dog 21 java

class strb
{

    static public void main(String...string)
    {
         StringBuilder s1 = new StringBuilder("Test");
         StringBuilder s2 = new StringBuilder("Test");

         System.out.println(s1);
         System.out.println(s2);
         System.out.println(s1==s2);
         System.out.println(s1.equals(s2)); //Line 1
         System.out.println(s1.toString()==s2.toString()); //Line 2
         if(s1.toString()==s2.toString())System.out.println("True"); //Line 3
    }

}
Run Code Online (Sandbox Code Playgroud)

输出是

Test
Test
false
false
Run Code Online (Sandbox Code Playgroud)

只需对.equals快速提问.

无论对象内容如何,.equals只有当两个对象引用指向同一个对象时才返回true?


编辑:现在我理解有关的部分,.equals但为什么第2行和第3行也没有返回true

编辑:我相信==看看引用变量的地址,所以s1和s2不能相等.如果我的假设不对,请更正我

hot*_*ure 47

是的,StringBuilder does not override Object's .equals() function这意味着两个对象引用不相同,结果为false.

因为StringBuilder,你可以使用s1.toString().equals(s2.toString())

对于编辑,您将==在两个不同的String对象上调用操作符.在==因为对象是不同的运营商将返回false.要比较字符串,您需要使用String.equals()String.equalsIgnoreCase()

这与你之前遇到的问题相同

  • 基本上,如果我不得不猜测,如果你有两个StringBuilder,你更有可能测试它们是否是构建字符串的StringBuilder,而不是两个不同的构建器具有相同的字符串.我想不出很多情况下两个不同的实例化StringBuilders会构建相同的东西. (6认同)