从我在网上看到的情况来看,人们似乎建议使用 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,l ,o"
.
一些进一步的链接:
- 带有“十六进制哈希码”的段落描述了默认值。只是documentation inherited from
AnyRef
,因为StringBuilder
的创建者没有费心提供更详细的文档。 - 如果您 look into code, you'll see that
toString
is actually just delegating toresult
. - documentation of
StringBuilder
在介绍性概述段落中还提到了result()
。
只需使用 result()
。
关于scala - 从 StringBuilder 转换为 String 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68513156/