Stringの+演算子の使用は、
リテラル+リテラル→どうせコンパイル時に最適化されますので、見た目のよいように好きに書いてください。

リテラル+変数、変数+変数→コストはStringBuffer使うのと変わりませんので、好きに書いてください。

リテラル+変数+何か、変数+何か+何か→StringBuffer#append()使うほうが,コストが低くなります。
ただし、このたぐいのことをやるときは分離されたリテラルの管理が面倒になるでしょうから、性能に問題
なければいっそのことjava.text.MessageFormat#format()使ったほうがいいですよ。
めったにでないエラーのメッセージ組み立てなんかには、是非MessageFormatを。

ループ内で繰り返し+する→そんな貴方に是非StringBufferを。
バイトアレイストリームにライトして最後にStringするとかもあるけど、どっちが効率
いいんだろね。

という認識だったのですが、よいのでせうか?