StringBuilder .equals 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
    }

}

输出是

Test
Test
false
false

只是有一个关于 .equals 的快速问题。

无论对象内容如何, .equals 是否仅在两个对象引用都指向同一个对象时才返回真?


编辑:现在我了解了关于 .equals 的部分,但是为什么第 2 行和第 3 行也不返回 true

编辑:我相信 == 查看参考变量的地址,因此 s1 和 s2 不能相等。如果我的假设不正确,请纠正我

原文由 UnderDog 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 349
2 个回答

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

对于 StringBuilder ,您可以使用 s1.toString().equals(s2.toString())

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

跟你之前遇到的问题一样

原文由 hotforfeature 发布,翻译遵循 CC BY-SA 4.0 许可协议

StringBuilder 类不提供重写的 equals() 方法。因此,当在 StringBuilder 的实例上调用该方法时,将执行该方法的 Object 类实现,因为 StringBuilder extends Object

源代码是

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

这只是比较引用相等性。

原文由 Sotirios Delimanolis 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题