+を使用するのではなく、StringBuilderを使用して複数の文字列を連結する必要があることを理解しています。私の質問は、カットオフポイントは何ですか?
4つ以上の文字列を連結する場合は、StringBuilder.append()を使用する必要があり、それ以外の場合は+を使用する必要があると言われています。そうですか?それとも、stringbuilderが4よりも効率的であるポイントですか?
+を使用するのではなく、StringBuilderを使用して複数の文字列を連結する必要があることを理解しています。私の質問は、カットオフポイントは何ですか?
4つ以上の文字列を連結する場合は、StringBuilder.append()を使用する必要があり、それ以外の場合は+を使用する必要があると言われています。そうですか?それとも、stringbuilderが4よりも効率的であるポイントですか?
零。
何年も前、はるか遠くのJavaバージョン(1.4)で、連結を(まだ発明されていないStringBuffer
スレッドセーフな同等の)に置き換えることを推奨する人もいました。StringBuilder
の導入、およびより高速な「最適化された」コードStringBuilder
の再定義により、不要な同期が発生しましたが、の非最適なコードは自動的にの利点を享受しました。StringBuilder
StringBuffer
+
StringBuilder
StringBuilder
連結が制御構造またはループと混合されている場合、または文字列の途中でいくつかの文字を更新する必要がある場合に使用します。そうでなければ、コンパイラーは従来の連結でうまく機能するのに十分賢いと思います。
Java 1.5 以降、コンパイラはソースで が使用されているStringBuilder
場合に自動的に使用+
します。
StringのJavadocから:
Java 言語は、文字列連結演算子 ( + ) と、他のオブジェクトの文字列への変換を特別にサポートしています。文字列の連結は、StringBuilder(または StringBuffer) クラスとその追加メソッドを通じて実装されます。
jse 5 以降、+ 記号はコンパイル中に stringbuilder に変換されます。
ただし、これには注意点があります。
String blam = a + b + c + d + e;
1 つの stringbuilder と 5 つの追加 (予想どおり) になります。
これ; でも:
String blam = a;
blam += b + c;
blam := d + e;
3 つの文字列ビルダー (1 行に 1 つ) になります。
要点: + 記号は問題ありません。すべてを 1 行のコードにまとめてください。
実装に依存するため、定義された答えはありません。3 つ以上の文字列を連結する必要がある場合JVM
に使用します。StringBuilder
いいケースに気がつきました。を連結する必要がある場合static final String
は、使用する必要はありませんStringBuilder
。コンパイラは、パフォーマンスを低下させずにそれを連結します。
final class Example {
public static final String STRING_ONE = "string";
public static final String STRING_TWO = "string";
public static final String STRING_THREE = "string";
public static final String STRING_FOUR = "string";
public String getBigString() {
return STRING_ONE + STRING_TWO + STRING_THREE + STRING_FOUR;
}
}
また、私はその質問に非常に興味があります。私は良いテストを実装しようとし、それについてここで尋ねました。
コンパイラはプラスをStringBuilder
それ自体に置き換えます。
この場合、回避したい状況がいくつかあります。たとえば、ループで+を使用します。反復ごとに、新しいStringBuilder
が作成されます。
この質問を読みたいかもしれません
コンパイラはこのようなものを最適化するのに非常に優れているため、通常はあまり得られません。ただし、たとえばループで連結を行っている場合は、代わりに StringBuilder を使用することでいくつかの利点が得られる場合があります。