猿问

我可以在 toString 实现中使用 "str".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

谁能解释为什么


哔哔one
浏览 177回答 3
3回答

慕容3067478

这是因为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)

森林海

s是String,sb是StringBuffer。它们不是同一个对象,因此默认情况下,它们不能等效。它也无助于StringBuffer 不覆盖的问题Object.equals,因此StringBuilder对象将永远等同于其相同的实例。

GCT1015

只是为了说明为什么在后台打印它们会做同样的事情:当您调用System.out.printlnStringBuilder 对象时,它会自动toString为您调用该对象上的方法。所以,你给它你的 StringBuilder 对象是这样的:System.out.println(sb);但它有效地(并自动)将它转换为System.out.println(sb.toString());
随时随地看视频慕课网APP

相关分类

Java
我要回答