ホームページ >Java >&#&チュートリアル >文字列のstringbufferとstringbuilderの違いは何ですか?
文字列における stringbuffer と stringbuilder の違いは次のとおりです: 1. StringBuffer はスレッド セーフですが、StringBuilder はスレッド セーフではありません; 2. StringBuffer はメソッドの同期を公開しますが、StringBuilder は公開しません。
#文字列の stringbuffer と stringbuilder の違いは次のとおりです:
違い 1: スレッド セーフ
StringBuffer: スレッドセーフ、StringBuilder: スレッドアンセーフ。 StringBuffer のすべてのパブリック メソッドが同期されており、StringBuilder は StringBuilder で変更されていないためです。 StringBuffer コード スニペット:@Override public synchronized StringBuffer append(String str) { toStringCache = null; super.append(str); return this; }
違い 2: Buffer
StringBuffer コード スニペット:private transient char[] toStringCache; @Override public synchronized String toString() { if (toStringCache == null) { toStringCache = Arrays.copyOfRange(value, 0, count); } return new String(toStringCache, true); }StringBuilder コード スニペット:
@Override public String toString() { // Create a copy, don't share the array return new String(value, 0, count); }StringBuffer が toString を取得するたびに、バッファ領域の toStringCache 値を直接使用して文字列を構築することがわかります。 StringBuilder は、毎回文字配列をコピーして文字列を構築する必要があります。 つまり、キャッシュのフラッシュも StringBuffer の最適化ですが、StringBuffer の toString メソッドは依然として同期です。
違い 3: パフォーマンス
StringBuffer はスレッドセーフであるため、そのすべてのパブリック メソッドは同期され、StringBuilder はメソッドのロックや同期を行わないため、間違いはありません。 StringBuilder のパフォーマンスは StringBuffer よりもはるかに優れていることがわかります。関連する学習に関する推奨事項:
以上が文字列のstringbufferとstringbuilderの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。