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

问题描述

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

创建此对象的字符串表示形式。认表示取决于平台。在 java 平台上,它是类名、“@”和十六进制对象的哈希码的串联。

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

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

解决方法

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

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

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

这样,当字符串长度超过 9000 kB 时,代码的读者就不必怀疑 StringBuilder.toString 是否会为了“简洁”而缩短某些内容,或者类似的事情。

>

mkString 完全用于其他用途,它主要用于散布分隔符,如 "hello".mkString(",") == "h,e,l,o"

一些进一步的链接:

只需使用 result()

,

TL;博士;使用 docs 中所述的 result

toString 绝不能为了快速调试以外的其他目的而在任何情况下被调用。

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