Java-String深究(String、StringBufferとStringBuiderについて)

2308 ワード

最近StringBurerを勉強しましたが、心の中にいくつかの疑問があります。String、StringBuffer、StrigBuiderについて検索しました。今整理します。
文字列処理におけるこの三つのカテゴリーの位置については言うまでもなく、彼らはいったいどんな長所と短所がありますか?いったいいつ誰を使うべきですか?以下の点から説明します。
三つの速度の比較:
                  StringBuider >  StringBuffer  >  String
String<(StringBurer、StrigBuider)の原因
       String:     
    StringBuffer:     
    StringBuilder:     
  
上の名前からもわかるように、Stringは「文字作成量」、つまり変更できないオブジェクトです。この言葉の理解に対して、あなたはこのような疑問を持つかもしれません。  ,例えばこのコード:
 String s = "abcd";
 s = s+1;
 System.out.print(s);// result : abcd1
 
       私達は明らかにスターリング型の変数sを変えましたが、なぜ変わっていませんか?JVMはこのコードを解析するための詐欺です。まずオブジェクトsを作成し、abcdを与えて、新しいオブジェクトsを作成して、第二行コードを実行するために使用します。つまり、私達の前のオブジェクトsは変化していません。だから、Stringタイプは変更できないオブジェクトです。このような仕組みで、Stringで文字列を操作するたびに、実際には新しいオブジェクトをどんどん作っていますが、元のオブジェクトはごみとしてGCに回収されます。このような実行効率はどれぐらいになるか分かります。
     彼らは文字列変数であり、変更可能なオブジェクトであり、それらを使って文字列を操作するたびに、実際にはオブジェクト上で動作します。このようにStringのようにいくつかの外部のオブジェクトを作成して操作することはできません。もちろんスピードは速いです。
特殊な例
 String str = “This is only a” + “ simple” + “ test”;
 StringBuffer builder = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
  
驚いたことに、strを作る対象の速度は速すぎます。この時はStringBufferが上根本に比べて全然優勢ではないです。実はこれはJVMのトリックです。
 String str = “This is only a” + “ simple” + “test”;
   
つまり:
String str = “This is only a simple test”;
だからあまり時間がいらないです。ただし、ここで注意したいのは、他のStringオブジェクトから文字列が来たら、速度はそんなに速くないということです。例えば、
       String str2 = “This is only a”;
    String str3 = “ simple”;
    String str4 = “ test”;
    String str1 = str2 +str3 + str4;
  
この時はJVMはちゃんと元の方式でやります。
StringBuiderとStrigBuffer
       StringBuilder:      
    StringBuffer:     
   
文字列バッファで複数のスレッドに使用されると、JVMはStringBuilderの動作が安全であることを保証できません。彼の速度が一番速いですが、StringBufferが正しく動作することを保証できます。もちろん大多数の場合はシングルスレッドでの作業ですので、ほとんどの場合はStringBuiderではなくStringBufferを推奨しています。スピードの原因です。
 
   三者に対する使用のまとめ
                                1.少量のデータを操作する場合=String
                        2.単スレッド操作文字列バッファ下で大量データ=StringBuiderを操作する
                        3.マルチスレッド操作文字列バッファで大量のデータを操作する=StringBuffer
Author : 純粋な鍋 ,url: http://www.cnblogs.com/A_ming/archive/2010/04/13/171395.