コンパイラーが内部的にStringBuilderを使用してString連結を実行するときにStringsを追加するので、私は不思議に思っています。その理由は何ですか。また、String連結がすでに機能している場合、なぜStringBuilderを使用する必要があるのでしょうか。他に具体的な理由はありますか?
先ほど触れたように、a + " = " + b
などの単純な文字列連結式の代わりにStringBuilder
を使用しないでください。後者の方が入力が速く、読みやすく、コンパイラは内部的にStringBuilder
を内部で使用するため、書き換えることによるパフォーマンス上の利点はありません。
ただし、StringBuilder
は、ループ内で多数の文字列を連結している場合に役立ちます。次のコードは非効率的です。 O(n2)実行して多くの一時的な文字列を作成する時間。
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
式のみを最適化します。上記のコードを自動的に最適化することはできません。
内部でstringbuilderを使用して文字列連結を想定しているのはどこですか?単純な連結が最適化されてしまう可能性がありますが、これは間違いなく次のようにはなりません。
String s = "";
for (int i = 0; i < 1000; i++){
for (int j = 0; j < 1000; j++){
s+= "" + i + j
}
}