2017-10-12 147 views
0

第6行和第8行有什么区别?它们都打印相同的字符串。为什么我们需要使用toString和StringBuilder。为什么我们需要在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 
+2

最后一行是无用的,你应该把它赋值给一个字符串。所以基本上第6行和第8行完全一样。如果你想测试你的理论,做System.out.println(s.ToString())。 这就是说,在这两种情况下,println函数都是为你做的,所以基本上,println在幕后采用字符串构建器的值,它是一个字符串并打印出来。 –

回答

4

没有什么线6和线路之间不同8.

PrintStream.println(Object)呼叫string.valueOf(Object)该调用对象的方法toString()的,并且被打印。

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

你打电话s.toString()的直接原因是为了获得当前的“建”从StringBuilder的作为string值,这样你就可以将它传递给一个希望将string其他代码。如果您要拨打的电话号码为StringBuilder,则只需通过s即可,但被调用的电话号码可以修改您的值(因为它是不可变的数据类型,所以不能用string)。

0

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

if you add string str = s.toString(); System.out.println(str);

然后该字符串将打印由stringbuilder制作的字符串变量。

+0

第6行不打印字符数组。它通过调用它的toString方法来打印一个对象。 – bartonjs

+0

是的,我把它放在我的脑海里,然后看到你张贴欢呼声提醒你。我也赞同你的回答,因为它比我的要好。 – Micktommyord

相关问题