>>189
どこの学生か知らんがそれは間違い。文字列の連続連結は最後に toString()
が行われる。以下の逆アセンブルコード (String s = s1 + s2 + s3;) を見れ
ば明白。

// 6 9:new #5 <Class StringBuffer>
// 7 12:dup
// 8 13:invokespecial #6 <Method void StringBuffer()>
// 9 16:aload_1
// 10 17:invokevirtual #7 <Method StringBuffer StringBuffer.append(String)>
// 11 20:aload_2
// 12 21:invokevirtual #7 <Method StringBuffer StringBuffer.append(String)>
// 13 24:aload_3
// 14 25:invokevirtual #7 <Method StringBuffer StringBuffer.append(String)>
// 15 28:invokevirtual #8 <Method String StringBuffer.toString()>
// 16 31:astore 4

スピードは StringBuffer どころか + 演算子に比べて、ヘヴィーなオーバーヘッド
がかかっている分 MessageFormat の方がはるかに遅い。さらに細かい文字列インス
タンス作りまくるので GC の回数を増やすことにもなる。今さらっと確認しても処理
時間 (+演算子:MessageFormat) = 421:3635 ミリ秒だったぞ。

ってか君、MessageFormat の選択基準間違ってる。これはフォーマットを外部定義
できるところに利点があって、決してパフォーマンスではない。

まぁ技術屋を目指すなら本ばかり読んでないで自分の手で実際にいろいろやって
みることだな。