ホームページ  >  記事  >  Java  >  文字列のstringbufferとstringbuilderの違いは何ですか?

文字列のstringbufferとstringbuilderの違いは何ですか?

coldplay.xixi
coldplay.xixiオリジナル
2020-07-02 14:14:424861ブラウズ

文字列における stringbuffer と stringbuilder の違いは次のとおりです: 1. StringBuffer はスレッド セーフですが、StringBuilder はスレッド セーフではありません; 2. StringBuffer はメソッドの同期を公開しますが、StringBuilder は公開しません。

文字列の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 よりもはるかに優れていることがわかります。

関連する学習に関する推奨事項:

Java ビデオ チュートリアル

以上が文字列のstringbufferとstringbuilderの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。