哪种解决方案具有更好的性能:StringBuilder 或 String Interpolation-Concatenation

Which solution has better performance: StringBuilder or String Interpolation-Concatenation

我正在使用 Scala 将文件写入磁盘。

为了创建将写入文件的整个字符串,我目前正在迭代我的数据并将所有信息附加到 StringBuilder 对象。

例如:

val moreData = getMoreData
strBuilder.append(moreData)
strBuilder.append("even more data")
//...
strBuilder.toString

在操作结束时,我调用 StringBuilder 的 toString 方法,并写入 Path。

我知道 Scala 对字符串进行了编译优化,所以我的问题是:

哪种方法的性能更好。 String-Interpolation-Concatenation 或 StringBuilder?

这些编译优化是否与 StringBuilder 有某种关联?也就是说,StringBuilder的追加操作有没有优化?

字符串插值串联使用 StringBuilder 来生成其结果。可以进一步优化字符串插值,但就目前而言,它主要是为表达能力而不是性能而设计的。如果您知道字符串创建将受到限制,那么您应该使用 StringBuilder,并且这样做并不难。如果您不知道,或者您知道这不是主要问题,字符串插值通常更容易阅读,因此在大多数情况下您应该更喜欢它。

连接多个字符串的最有效方法是使用 StringBuilder

但是你的任务不是字符串连接。将多个字符串写入文件的最有效方法是使用旧的 java 的 FileWriterBufferedWriter:

val fw = new FileWriter("foo.out")
val bw = new BufferedWriter(fw)

strings.foreach {
  s =>
    bw.write(s)
}

bw.close()
fw.close()

如果您需要格式化功能,您可以选择将 BufferedWriter 换成 PrintWriter

当然,如果您更喜欢性能而不是代码大小,那么以上所有内容都是正确的。