3種類の間のString、StringBufferのとのStringBuilder
コンセプト
1.文字列型は、オブジェクトは、Java内で、不変オブジェクト、変更文字列は、必要に新しい文字列オブジェクトを生成するたびに、新しいオブジェクトへのポインタ、ループ内であれば、常にオブジェクトを変更し、我々はオブジェクトより、Javaの自動ガベージコレクション機構が作業を開始する場合は、効率が非常に低いので、新しいオブジェクトを生成し続けなければならない、常に場所を変更するStringオブジェクトタイプの文字列を使用しないことをお勧めします。
2.のStringBufferは可変オブジェクトが、各操作は、その効率が大きく文字列よりStringBufferの効率的なほとんどの場合、改善されるので、オブジェクト自体で動作するのではなく、新しいオブジェクトを作成することです高いです。
、のStringBufferと互換性のある文字の可変配列として3.StringBuilderとStringBufferのは、APIを提供していますが、保証の同期ができません
未処理のStringBuilder同期(同期)問題がないので、文字列バッファの使用中スレッドとして使用された場合に、使用のStringBuilderは、スタンドアロンの非マルチスレッドの場合には、より良い効率を有することになります。
StringBufferのは、自分自身でオブジェクト管理同期の問題を聞かせて、StringBuildはStringBufferのを使用するために、マルチスレッドで動作します、同期の問題に対処します。
実行速度や速度
この点での動作の速度は、以下のとおりです。
StringBuilder> StringBufferの>文字列
文字列の最も遅いの理由:
文字列定数、あなたがオブジェクトを変更することはできませんが、2つのオブジェクトが可変で、変更することができます作成した後のStringBuilderとStringBufferのは、文字列変数、すなわちStringオブジェクトですしながら、
StringBuilderとStringBufferのオブジェクトが変数で、変数の操作は、作成およびリカバリ操作せずに、直接オブジェクトに変更を加えることがあるので、速度が非常に速く文字列を超えています。
スレッドセーフ
スレッドセーフでは:
StringBuilderはスレッドセーフではありません、高い動作効率、
StringBufferのは、スレッドセーフであります
文字列バッファは、synchronizedキーワードと多くの点で、StringBufferのを複数のスレッドを使用している場合StringBufferオブジェクトは、スレッドセーフであることを保証することは可能ですが、StringBuilderのアプローチはキーではない、それは、スレッドの安全性を保証できない場合間違った操作が発生した何かがあるかもしれません。あなたはマルチスレッドで動作したいのであれば、我々はStringBufferのを使用する必要がありますが、シングルスレッドの場合には、速いのStringBuilderを使用することをお勧めします。
使用法の概要
文字列:文字列の操作の少量を適用します
StringBuilder:文字バッファの下でシングルスレッド動作中に大量のデータを行うために適用されます
文字列変数は、メソッド内で定義されている場合、これは彼だけにアクセスするための一つのスレッドを有していてもよく、そこには不安はありませんし、その後のStringBuilderを使用します。
文字バッファの下で、マルチスレッド操作に適した大量のデータの場合:StringBufferの
あなたはそこにクラスのメンバ変数を定義すると、このクラスのオブジェクトのインスタンスは、マルチスレッド環境でのStringBufferを使用することをお勧め、それを使用する場合