ホームページ > Java > &#&ベース > string、stringbuffer、stringbuilder の違いは何ですか?

string、stringbuffer、stringbuilder の違いは何ですか?

青灯夜游
リリース: 2020-11-20 09:54:27
オリジナル
14164 人が閲覧しました

違い: String クラスは不変クラスです。String オブジェクトが作成されると、オブジェクトに含まれる文字シーケンスは、オブジェクトが破棄されるまで不変です。StringBuffer オブジェクトは変更可能な文字列オブジェクトを表し、Thread-安全; StringBuilder クラスは変更可能な文字列オブジェクトを表し、スレッドセーフではありません。

string、stringbuffer、stringbuilder の違いは何ですか?

##String、StringBuffer、StringBuilder の違い:

String String クラスは不変クラスです。つまり、String オブジェクトが作成されると、そのオブジェクトに含まれる文字シーケンスは、オブジェクトが破棄されるまで変更できません。 。

これは String クラスの説明です。Xiao Xian'er は前にこの状況を見て、次のように上記の説明を理解できませんでした。

String a = "123";
a = "456";
// 打印出来的a为456
System.out.println(a)
ログイン後にコピー

これを見て Xiao Xian'er は理解できませんでした. これは明らかではありません 修正されましたか?なぜ不変クラスと言われるのでしょうか?

Xiao Xianer と彼の友人から学んだ後、String クラスの不変性がどこに反映されているかを理解しました。次に、上記の

a オブジェクトのメモリ ストレージ スペース図を見てみましょう


string、stringbuffer、stringbuilder の違いは何ですか? 値を再度割り当てると、ヒープ内の元のインスタンス オブジェクトが再割り当てされるのではなく、新しいインスタンス オブジェクトが生成され、文字列 "456" を指すことがわかります。最後に生成されたインスタンス オブジェクトへ。以前のインスタンス オブジェクトはまだ存在します。再度参照されない場合はガベージ コレクションされます。

StringBuffer## StringBuffer オブジェクトは、可変文字シーケンスを持つ文字列を表します。StringBuffer が作成されると、StringBuffer () によって提供される追加が行われます。 insert()、reverse()、setCharAt()、setLength() およびその他のメソッドは、この文字列オブジェクトの文字シーケンスを変更できます。 StringBuffer を通じて最終的な目的の文字列が生成されたら、その toString() メソッドを呼び出して、それを String オブジェクトに変換できます。

StringBuffer b = new StringBuffer("123");
b.append("456");
// b打印结果为:123456
System.out.println(b);
ログイン後にコピー

b オブジェクトのメモリ空間マップを見てみましょう:


したがって、StringBuffer オブジェクトは、可変文字シーケンス。オブジェクトは再生成されず、新しい文字列を元のオブジェクトに連結できます。 string、stringbuffer、stringbuilder の違いは何ですか?

StringBuilder

StringBuilder クラスは、変更可能な文字列オブジェクトも表します。実際、StringBuilder と StringBuffer は基本的に似ており、2 つのクラスのコンストラクターとメソッドも基本的に同じです。違いは次のとおりです。StringBuffer はスレッド セーフですが、StringBuilder はスレッド セーフ関数を実装していないため、パフォーマンスがわずかに高くなります。

StringBuffer はどのようにしてスレッド セーフを実現するのでしょうか?

StringBuffer クラスに実装されたメソッド:

StringBuilder クラスに実装されたメソッド: string、stringbuffer、stringbuilder の違いは何ですか?

string、stringbuffer、stringbuilder の違いは何ですか?synchronized キーワード

が StringBuffer クラスのメソッドに追加されていることがわかります。これは、スレッドの安全性を確保するためにこのメソッドにロックが追加されていることを意味します。

Java9 の改善点

# Java9 では、文字列 (String、StringBuffer、StringBuilder を含む) の実装が改善されました。 Java 9 より前では、文字列は char[] 配列を使用して文字を格納するため、文字列内の各文字は 2 バイトを占有しますが、Java 9 では、文字列は byte[] 配列とエンコード フラグ フィールドを使用して文字を格納するため、文字列の各文字が占有します。たったの1バイト。したがって、Java9 の文字列はよりスペースが節約され、文字列の関数メソッドは影響を受けません。 プログラミング関連の知識について詳しくは、

プログラミング入門

をご覧ください。 !

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート