私はこの質問に答えるつもりはありませんでしたが、ここには 2 つの回答 (投票されています!) があり、それらはまったく間違っています。次の式を検討してください。
String a = "a" + "b" + "c";
String b = System.getProperty("blah") + "b";
最初のものはコンパイル時に評価されます。2 番目は実行時に評価されます。
そのため、定数連結 (任意の型) を StringBuilder や StringBuffer などに置き換えないでください。変数が関与する場合にのみ使用し、通常は多くのオペランドを追加する場合、またはループで追加する場合にのみ使用してください。
文字が一定の場合、これで問題ありません。
String s = "" + 'a' + 'b' + 'c';
ただし、そうでない場合は、次のことを考慮してください。
String concat(char... chars) {
if (chars.length == 0) {
return "";
}
StringBuilder s = new StringBuilder(chars.length);
for (char c : chars) {
s.append(c);
}
return s.toString();
}
適切な解決策として。
ただし、最適化したくなる人もいるかもしれません。
String s = "Name: '" + name + "'"; // String name;
これに:
String s = new StringBuilder().append("Name: ").append(name).append("'").toString();
これは善意によるものですが、最終的にはDON'Tです。
なんで?別の答えが正しく指摘したように、コンパイラーがこれを行います。したがって、自分で行う場合、コンパイラがコードを最適化することを許可していないか、それが良いアイデアであるかどうかに依存していません。コードは読みにくく、不必要に複雑です。
低レベルの最適化では、コンパイラはコードの最適化に優れています。
コンパイラにその仕事をさせてください。この場合、最悪のシナリオは、コンパイラが暗黙的にコードを正確に記述したものに変更することです。2 ~ 3 個の文字列を連結する方が、StringBuilder を構築するよりも効率的な場合があるため、そのままにしておく方がよい場合があります。コンパイラは、この点について最もよく知っています。