【Java】StringBufferとStringBuilderの違い


教科書的な解説

StringBuffer

可変の文字列を扱う。
Stringクラスは、文字列を変更するたびに新しいオブジェクトを生成するが、StringBufferは、生成されたオブジェクトに文字列を追加していく。
つまり、生成されるオブジェクトは1つだけになる。

StringBuilder

可変の文字列を扱う。
JDK1.5でリリースされたクラスで、StringBufferと同じメソッドを持っているし、使い方もStringBufferと同じ。
StringBufferとの違いは「スレッドセーフではない(同期化しない)」こと。
同期化しないので、処理が早い

どっちを使えばいい?

新人研修の場合

研修の課題で処理速度が求められることはまずないので、どっちを使ってもいいと思う。
意味が分からなくてもいいから、違いを聞かれた時にパッと答えられれば(新人なので)それでいい・・・と私は思ってる。
どちらかというと、StringBuffer/StringBuilderが使えるようになってほしい

業務での場合

既存プログラムの改修であれば、すでに多用されている方を使った方がいい。
お作法的にNGだったとしても、その後のメンテナンス性を考慮すると、あえて既存を踏襲した方が良いことの方が多いので。
1から新規で作るなら、(個人的には)速度性を重視してStringBuilderを使う。