java我可以使用“str”吗。使用toString实现的equals(obj)?
String s="test";
StringBuilder sb = new StringBuilder("test");
System.out.println(s); //prints test
System.out.println(sb); //prints test
s.equals(sb); -> false
有人能解释为什么吗
你可以在下面搜索框中键入要查询的问题!
String s="test";
StringBuilder sb = new StringBuilder("test");
System.out.println(s); //prints test
System.out.println(sb); //prints test
s.equals(sb); -> false
有人能解释为什么吗
# 1 楼答案
s
是String
,而sb
是StringBuilder
,因此它们不相等。如果要检查它们的字符串表示(toString()
)是否相等,则必须直接执行以下操作:# 2 楼答案
我想补充一点
StringBuilder
不会重写equals
和hashcode
方法。因此equals
方法使用默认的对象标识比较。因此,2StringBuilder
实例,如sb1
和sb2
是相等的,当且仅当sb1==sb2
为真因此,在执行
sb.equals(s)
测试时,无法满足字符串equals
方法对称契约# 3 楼答案
为了解释为什么在后台打印这两个函数会做相同的事情:当您在StringBuilder对象上调用
System.out.println
时,它会自动为您在对象上调用toString
方法因此,您可以这样给它您的StringBuilder对象:
System.out.println(sb);
,但它有效地(自动地)将其转换为System.out.println(sb.toString());
# 4 楼答案
s
是String
,而sb
是StringBuffer
。它们不是同一个对象,因此默认情况下,它们不能相等它对
StringBuffer
{a1}也没有帮助,因此StringBuilder
对象将only ever be equivalent to its same instance# 5 楼答案
这是因为
String
对象与StringBuilder
对象不同强>你可能想要的是:
下面是
String
类的equals
方法的样子:取自openjdk
如您所见
equals
方法将return false
由于以下条件: