从StringBuilder转换为String的正确方法是什么?
从我在网上看到的情况来看,人们似乎建议使用 toString() 方法,但是文档指出:
创建此对象的字符串表示形式。默认表示取决于平台。在 java 平台上,它是类名、“@”和十六进制对象的哈希码的串联。
所以看起来使用这种方法可能会导致一些问题?
还有 mkString 和 result()。后者似乎最有意义。但我不确定这 3 种方法之间的区别是什么,以及是否应该使用 result() 。
回答
该toString实施目前只是重定向到该result方法无论如何,所以这两种方法都会以同样的方式行事。但是,它们表达的意图略有不同:
toString请求对StringBuilder当前状态的文本表示,该表示“简洁但内容丰富(并且)易于人们阅读”。因此,理论上,此方法的(模糊)规范不禁止缩写结果,或以任何其他方式增强简洁性和可读性。result请求实际构造的字符串。这里似乎不可能有不同的读数。
因此,如果您想获得结果字符串,请使用result尽可能清楚地表达您的意图。
这样,StringBuilder.toString当字符串长度超过 9000 kB 时,您的代码的读者将不必怀疑是否会为了“简洁”而缩短某些内容或类似的内容。
的mkString是别的东西完全,它主要用于点缀分离,如"hello".mkString(",") == "h,e,l,l,o"。
一些进一步的链接:
- 带有“十六进制哈希码”的段落描述了默认的. 它只是从 继承的文档
AnyRef,因为 的创建者StringBuilder没有费心提供更详细的文档。 - 如果您查看代码,您会发现它
toString实际上只是委托给result. - 介绍性概述段落中
StringBuilder也提到的文档result()。
只需使用result().