为了账号安全,请及时绑定邮箱和手机立即绑定

我可以在 toString 实现中使用 "str".equals(obj) 吗?

我可以在 toString 实现中使用 "str".equals(obj) 吗?

哔哔one 2021-09-29 15:17:36
String s="test";StringBuilder sb = new StringBuilder("test");System.out.println(s); //prints testSystem.out.println(sb); //prints tests.equals(sb); -> false谁能解释为什么
查看完整描述

3 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

这是因为String对象不同于StringBuilder对象。


你可能想要的是:


s.equals(sb.toString())

这是String类的equals方法的样子:


public boolean equals(Object anObject) {

    if (this == anObject) {

        return true;

    }

    if (anObject instanceof String) { // this condition is false for StringBuilder objects

           // some logic here

        }

    }

    return false;

}

取自openjdk。


如您所见,该equals方法将return false由于以下条件:


if (anObject instanceof String)


查看完整回答
反对 回复 2021-09-29
?
森林海

TA贡献2011条经验 获得超2个赞

sStringsbStringBuffer。它们不是同一个对象,因此默认情况下,它们不能等效。

它也无助于StringBuffer 不覆盖的问题Object.equals,因此StringBuilder对象将永远等同于其相同的实例


查看完整回答
反对 回复 2021-09-29
?
GCT1015

TA贡献1827条经验 获得超4个赞

只是为了说明为什么在后台打印它们会做同样的事情:当您调用System.out.printlnStringBuilder 对象时,它会自动toString为您调用该对象上的方法。

所以,你给它你的 StringBuilder 对象是这样的:System.out.println(sb);但它有效地(并自动)将它转换为System.out.println(sb.toString());


查看完整回答
反对 回复 2021-09-29
  • 3 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信