这里第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
答案 0 :(得分: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
,因为它是一种不可变的数据类型。)
答案 1 :(得分:0)
System.out.println可以打印出字符数组(第6行) s.toString()用于将stringbuilder内容实际放入字符串中。在你的代码中,你没有将它设置为字符串变量,所以什么都不会发生...所以在第8行,字符数组会再次从字符串构建器的内容中打印出来。
如果你添加 string str = s.toString(); 的System.out.println(STR);
然后字符串将打印由stringbuilder生成的字符串变量。
答案 2 :(得分:0)
StringBuilder需要toString()才能将可变的字符序列转换为String。
从技术上讲,要从返回String的方法返回StringBuilder obj,必须使用toString()将StringBuilder转换为String。
您还可以对不带toString()方法的StringBuilder obj进行系统设置,以直接获取值