【问题标题】:Why do we need to use toString method with stringbuilder为什么我们需要在 stringbuilder 中使用 toString 方法
【发布时间】:2017-10-12 15:21:47
【问题描述】:

这里第 6 行和第 8 行有什么区别?它们都打印相同的字符串。为什么我们需要将 toString 与 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 行是完全一样的。如果您想测试您的理论,请执行 System.out.println(s.ToString())。话虽这么说,println 函数在这两种情况下都会为您执行此操作,所以基本上,println 在幕后,获取您的字符串生成器的值,它是一个字符串并打印它。

标签: java string stringbuilder


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 第 6 行不打印字符数组。它打印一个对象……通过调用它的 toString 方法。
    • 是的,我脑子里就想到了这一点,然后读到你为提醒而欢呼。我也赞成你的回答,因为它比我的好。
    【解决方案3】:

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

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

    你也可以sysout一个StringBuilder obj而不用toString()方法直接获取值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      • 1970-01-01
      相关资源
      最近更新 更多