2010-11-23 6 views
9

私は、コンパイラ(またはそれはJVMだったのでしょうか?)が自動的にStringBuilderを文字列連結に使うと聞いてきました。明示的に宣言する時期はいつですか?スレッドセーフであるためにStringBufferは必要ありません。StringBuffer/StringBuilderはコンパイラによって暗黙的に使用されるのはいつですか?

ありがとうございました。

+1

[Javaコンパイラが多数の文字列連結を1行に表示するとどうなりますか?](http://stackoverflow.com/questions/1296571/what-happens-when-java-compiler-sees-many-string- –

+1

注:StringBuilderを使用しない状況の1つは、文字列をコンパイル時に連結できる場合です。 (StringBuilderなし) –

+0

BTW:スレッド安全のためにStringBufferを使用する必要がある場合は、IMHOという設計上の問題があります。 :P –

答えて

14

コンパイラは "+"を使用して任意の文字列連結に自動的に使用します。

ループ内で連結する場合は、通常は明示的に使用します。たとえば:あなたは複数の方法に比べて文字列を構築する、またはおそらく建物の一部のビットをconditionaliseしたかったところ

StringBuilder builder = new StringBuilder(); 
for (String name : names) 
{ 
    builder.append(name); 
    builder.append(", "); 
} 
if (builder.length() > 0) 
{ 
    builder.setLength(builder.length() - 2); 
} 
System.out.println("Names: " + builder); 

別の状況は次のようになります。基本的に、(コンパイラが助けることができる)単一の文で文字列を作成していない場合は、少なくともStringBuilderの使用を検討する必要があります。

+1

私は 'StringBuilder'はこのような場合には使用されないことに言及する価値があると思います:' String str = ""; str + = <コンパイル時定数ではないもの> '。 –

+0

ああ、感謝します、ありがとう!私はあなたがC#の男だと思った; o) –

+0

@Matt面白い、チップのおかげで –

関連する問題