3 回答
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)
TA贡献2011条经验 获得超2个赞
s
是String
,sb
是StringBuffer
。它们不是同一个对象,因此默认情况下,它们不能等效。
它也无助于StringBuffer
不覆盖的问题Object.equals
,因此StringBuilder
对象将永远等同于其相同的实例。
TA贡献1827条经验 获得超4个赞
只是为了说明为什么在后台打印它们会做同样的事情:当您调用System.out.println
StringBuilder 对象时,它会自动toString
为您调用该对象上的方法。
所以,你给它你的 StringBuilder 对象是这样的:System.out.println(sb);
但它有效地(并自动)将它转换为System.out.println(sb.toString());
添加回答
举报