>>400
変数の為の領域確保が、「もし」ループの回数行われるなら無駄ですよね?
でも、この場合はスタックに確保される変数なので確保は行われないはずですね。
コンパイル時点で、スタックの何処に入るか決まっています。
最適化云々ではなくローカル変数に利用するバイトコードの構造でそうなるだけです。
つまりString str1というのはバイトコードにならないということです。

StringBuilderに最適化するのは本当です。
以前は、StringBufferに展開していました。
ようは、分かりやすくコードを書けということです。