从 StringBuilder 转换为 String 的正确方法是什么?

What's the correct way to convert from StringBuilder to String?

根据我在网上看到的情况,人们似乎建议使用 toString() 方法,但是文档指出:

创建此对象的字符串表示形式。默认表示是平台相关的。在 java 平台上,它是 class 名称“@”和对象的十六进制哈希码的串联。

所以看起来使用这种方法可能会导致一些问题?

还有mkString和result()。后者似乎最有意义。但是我不确定这 3 种方法之间的区别是什么,以及是否应该使用 result()。

TL;DR;按照 docs.

中的说明使用 result

toString 绝不能出于快速调试以外的任何其他目的调用。

mkString 继承自集合层次结构,它基本上会创建另一个 StringBuilder,因此效率非常低。

toString 实现目前只是重定向到 result 方法,因此这两个方法的行为方式相同。然而,他们表达的意图略有不同:

  • toString 请求 StringBuilder 当前状态 "concise but informative (and) that is easy for a person to read" 的文本表示。因此,从理论上讲,此方法的(模糊)规范并不禁止缩写结果,或以任何其他方式增强简洁性和可读性。
  • result 请求实际构造的字符串。这里似乎没有不同的读数。

因此,如果你想获得结果字符串,请使用result尽可能清楚地表达你的意图。

这样,当字符串超过 9000 kB 时,您的代码的 reader 将不必考虑 StringBuilder.toString 是否会为了“简洁”而缩短某些内容,或者类似的东西。

mkString完全是别的东西,它主要用于穿插分隔符,如"hello".mkString(",") == "h,e,l,l,o"

一些进一步的链接:

只需使用result().