从 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"
。
一些进一步的链接:
- 带有“十六进制哈希码”的段落描述了默认值。只是 documentation inherited from
AnyRef
,因为 StringBuilder
的创建者没有提供更详细的文档。
- 如果你look into code, you'll see that
toString
is actually just delegating to result
.
- documentation of
StringBuilder
在介绍性概述段落中也提到了 result()
。
只需使用result()
.
根据我在网上看到的情况,人们似乎建议使用 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"
。
一些进一步的链接:
- 带有“十六进制哈希码”的段落描述了默认值。只是 documentation inherited from
AnyRef
,因为StringBuilder
的创建者没有提供更详细的文档。 - 如果你look into code, you'll see that
toString
is actually just delegating toresult
. - documentation of
StringBuilder
在介绍性概述段落中也提到了result()
。
只需使用result()
.