为什么我们需要将 toString 方法与 stringbuilder 一起使用

Why do we need to use toString method with stringbuilder

这里第6行和第8行有什么区别?它们都打印相同的 string.Why do we need to use toString with StringBuilder.

     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) calls string.valueOf(Object) 调用对象的 toString() 方法,然后打印出来。

System.out.println(s)System.out.println(s.toString()) 具有相同的输出(除非 snull,在这种情况下后者会抛出异常)。

您直接调用 s.toString() 的原因是从 StringBuilder 获取当前的 "built" 值作为 string,这样您就可以将它传递给需要 [=] 的其他代码16=]。如果您要调用的代码采用 StringBuilder,您可以只传递 s,但是被调用的代码可以修改您的值(它们不能使用 string,因为它是不可变数据类型)。

System.out.println 可以打印出字符数组(第 6 行) s.toString() 用于实际将 stringbuilder 内容放入字符串中。在你的代码中,你没有将它设置为字符串变量,所以什么都不会发生......所以在第 8 行,字符数组从你的字符串构建器的内容中再次打印出来。

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

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

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

所以从技术上讲,要从方法 returning String 中 return StringBuilder obj,您必须使用 toString() 将 StringBuilder 转换为 String。

你也可以在没有方法 toString() 的情况下 sysout StringBuilder obj 来直接获取值