当你打电话给" toString"没有字符串变量的方法来收集返回的值? 例如:这里有两个我厌倦的代码片段。第一个给出了正确的答案,第二个给出了错误的答案,但它仍然编译。如果" toString"方法是为了返回一个值,不应该为第二个代码块得到编译器错误吗?
StringBuffer sb=new StringBuffer(s); //s is a string input taken from user
sb.reverse();
String rev=sb.toString();
if(s.equals(rev)){
System.out.println("yes");
/*second try*/
StringBuffer sb=new StringBuffer(s);
sb.reverse();
sb.toString();//what is happening here?
if(s.equals(sb)){
System.out.println("yes");
答案 0 :(得分:1)
理解起来很简单。
在第一种情况中,返回值并由变量引用,以便稍后可以使用该值。
在第二种情况中,返回的值与之前一样,但任何变量都没有引用它。因此,价值只是浪费,以后不能使用或操纵。
答案 1 :(得分:0)
toString将返回对象返回的toString方法。 试试System.out.println(sb.toString);看看它的回归。
答案 2 :(得分:0)
StringBuffer#toString()
返回一个字符串,如果你没有将返回的值放在一个变量中,那么就会发生这样的事情并且你请求的信息都消失了。
答案 3 :(得分:0)
.toString()
是一个返回字符串的方法,它不会将StringBuffer转换为字符串。
if(s.equals(sb.toString()))
会起作用,因为它将s
与sb
的值作为字符串进行比较,即使它没有将值赋给变量。
答案 4 :(得分:0)
sb.toString(); //这里发生了什么?
您要将StringBuilder
对象转换为String
这是好的,但您没有将返回值存储到String
类型,并在equals
调用中稍后使用。你应该采用以下方式:
String reversedString = sb.toString();
if(s.equals(reversedString )){
或者只是
if(s.equals(sb.toString())){
现在,您正在使用s
类的sb
方法将equals
与String
进行比较。如果作为参数传入的对象不是false
类的实例,则此方法返回String
。由于StringBuilder
对象sb
不是String
的实例,因此equals
方法返回false。
答案 5 :(得分:0)
在Java中,您不必检查或存储任何返回值。
执行sb.toString()
并截断返回值。
请注意,必须执行该方法,因为可能存在副作用。要测试它,您可以在您的课程中实现:
@Override
public String toString() {
System.out.println("toStringTest");
return super.toString();
}
“toStringTest”将被推出!