40

重複の可能性:
JavaのtoString()でのStringBuilderとStringの連結

コンパイラは文字列連結を実行するときにStringBuilderを内部的に使用して文字列を追加するので、何が重要で、文字列連結がすでに機能しているのになぜStringBuilderを使用する必要があるのでしょうか。他に具体的な理由はありますか?

4

2 に答える 2

69

StringBuilderおっしゃるように、などの単純な文字列連結式の代わりに使用しないでくださいa + " = " + b。後者は入力が速く、読みやすく、コンパイラはStringBuilderとにかく内部的に使用するため、書き換えによるパフォーマンス上の利点はありません。

ただしStringBuilder、ループ内で多数の文字列を連結する場合に役立ちます。次のコードは非効率的です。実行にはO(n 2)時間が必要であり、多くの一時文字列が作成されます。

String result = "";
for (int i = 0; i < foo.length; ++i)
{
    result += bar(foo[i]);  // Bad
}

代わりにこれを試してください:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < foo.length; ++i)
{
    sb.append(bar(foo[i]));
}
String result = sb.toString();

コンパイラーは単純なa + b + c式のみを最適化します。上記のコードを自動的に最適化することはできません。

于 2012-08-13T21:11:50.013 に答える
3

文字列連結が stringbuilder を内部的に使用するとどこで想定していますか? 単純な連結は最適化されるかもしれませんが、これは間違いなくそうではありません:

String s = "";

for (int i = 0; i < 1000; i++){
  for (int j = 0; j < 1000; j++){
    s+= "" + i + j
}
}
于 2012-08-13T21:12:34.263 に答える