为什么我们需要在 StringBuilder 中使用 toString 方法?

问题描述 投票:0回答:3

6号线和8号线有什么区别?

它们都打印相同的字符串。为什么我们需要将 toString 与 StringBuilder 一起使用?

StringBuilder s = new StringBuilder("hello");   // Line 1
System.out.println(s);                          // Line 2

s.append("hi");                                 // Line 3
System.out.println(s);                          // Line 4

s.append("okk");                                // Line 5
System.out.println(s);                          // Line 6

s.toString();                                   // Line 7
System.out.println(s);                          // Line 8
java string stringbuilder
3个回答
5
投票

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
,因为它是不可变的数据类型)。


0
投票

System.out.println 可以打印出字符数组(第6行) s.toString() 用于实际将字符串构建器内容放入字符串中。在您的代码中,您没有将其设置为字符串变量,因此不会发生任何事情...因此在第 8 行,从字符串生成器的内容再次打印字符数组。

如果您添加 字符串 str = s.toString(); System.out.println(str);

然后字符串将打印由 stringbuilder 生成的字符串变量。


0
投票

StringBuilder 需要 toString() 将可变的字符序列转换为 String。

因此从技术上讲,要从返回 String 的方法返回 StringBuilder 对象,您必须使用 toString() 将 StringBuilder 转换为 String。

您还可以在不使用 toString() 方法的情况下 sysout StringBuilder 对象来直接获取值

© www.soinside.com 2019 - 2024. All rights reserved.