[英]Why do we need to use toString method with stringbuilder
6号线和8号线有什么区别? 它们都打印相同的字符串。为什么我们需要在StringBuilder中使用toString。
StringBuilder s = new StringBuilder("hello");//line1
System.out.println(s);//line2
s.append("hi");//line3
System.out.println(s);
s.append("okk");
System.out.println(s);//line 6
s.toString();
System.out.println(s);//line 8
第6行和第8行之间没有什么不同。
PrintStream.println(Object)调用string.valueOf(Object) ,后者调用对象的toString()
方法,并被打印。
System.out.println(s)
和System.out.println(s.toString())
具有相同的输出(除非s
为null
,在这种情况下后者会引发异常)。
直接调用s.toString()
的原因是从StringBuilder中获取当前的“内置”值作为string
以便将其传递给需要string
其他代码。 如果要调用的代码采用StringBuilder
,则可以传递s
,但是被调用的代码具有修改值的能力(它们不能使用string
因为它是不可变的数据类型)。
System.out.println可以打印出字符数组(第6行),s.toString()用于将stringbuilder内容实际放置到字符串中。 在您的代码中,您没有将其设置为字符串变量,因此不会发生任何事情……因此,在第8行中,从字符串构建器的内容中再次打印了字符数组。
如果添加字符串str = s.toString(); System.out.println(str);
然后该字符串将打印由stringbuilder生成的string变量。
StringBuilder需要toString()将可变的字符序列转换为String。
因此,从技术上讲,要从返回String的方法返回StringBuilder obj,必须使用toString()将StringBuilder转换为String。
您还可以对不带toString()方法的StringBuilder obj进行系统设置,以直接获取值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.