2020年7月30日 追記:こちらで詳しく解説しています



上級(歴史的経緯についての理解が必要)

scala.collection.mutable.StringBuilder, java.lang.StringBuilder, java.lang.StringBuffer の使い分けについて
  • java.lang.StringBuilderはsynchronizedされてない。その分速い。Java 5から追加。
  • java.lang.StringBufferはsynchronizedされてる。その分遅い。最初からある。
  • Javaであれば、内容を変更可能な文字列を扱う際、基本的にはjava.lang.StringBuilderクラスを使う。
    • 文字列の変更を繰り返す場合はStringよりもStringBuilerの方が効率的
  • スレッドセーフを確保したい場面であれば、java.lang.StringBufferを使うとAPI Docsには書かれている。
  • ただし、同期化の問題はStringBufferにすればたちまち解決するというものではないので、結局のところはStringBuilderを使いつつも同期化は手ずから愚直に実装すべきである。
  • したがってStringBufferは基本的に使用すべきではなく、現在存在しているのは専ら後方互換の目的である。
  • これを踏まえ、Scalaでは内容を変更可能な文字列を扱うにはscala.collection.mutable.StringBuilderクラスを使えばよい
    • scala.collection.mutable.StringBuilderは内部実装がStringBuilderである
    • scala.collection.mutable.StringBuilderはjava.lang.StringBuilderと機能的に互換性がある。
    • さらにScalaっぽい使い方ができるようになっている(要出典)
    • 長い文字列

参考



追記

まだ読んでいないがこちらの記事も参考になりそう