StringBuffer文字列接合
8826 ワード
public static void founc03(){
int[] arr={34,12,89,68};
StringBuffer buffer=new StringBuffer();
buffer=buffer.append("[");
for(int i=0;i<arr.length;i++){
if(i==arr.length-1){
buffer=buffer.append(arr[i]);
break;
}
buffer=buffer.append(arr[i]).append(",");
}
buffer=buffer.append("]");
System.out.println(buffer);
}
配列arr={34,12,89,68}印刷[34,12,89,68]
String、StringBuilder、StringBufferの3つの違いを言わざるを得ません.最近Javaを勉強しているとき、String、StringBuilder、StringBufferの3つの種類の違いは何ですか.何か間違いがございましたら、ご指摘ください.
この3つのクラスの違いは、主に2つの側面、すなわち、実行速度とスレッドセキュリティの2つの側面にあります.
まず、実行速度、または実行速度です.この点では、StringBuilder>StringBuffer>String String Stringが最も遅い理由です.
Stringは文字列定数であり、StringBuilderとStringBufferは文字列変数です.つまり、Stringオブジェクトが作成されるとオブジェクトは変更できませんが、後者のオブジェクトは変数であり、変更できます.次のコードを例に挙げます.
1 String str="abc";
2 System.out.println(str);
3 str=str+"de";
4 System.out.println(str);
このコードを実行すると、まず「abc」が出力され、次に「abcde」が出力されます.strというオブジェクトが変更されたようです.実は、これは単なる仮象です.JVMはこれらの行のコードに対してこのように処理されています.まずStringオブジェクトstrを作成し、「abc」をstrに割り当てます.そして、3行目では、JVMはstrという新しいオブジェクトも作成しました.その後、元のstrの値と「de」を合わせて新しいstrに値を割り当てると、元のstrはJVMのゴミ回収メカニズム(GC)で回収されるので、strは実際には変更されていません.つまり、前述のStringオブジェクトが作成されると変更できません.したがって、JavaでStringオブジェクトを操作することは、実際には新しいオブジェクトを作成し続け、古いオブジェクトを回収するプロセスであるため、実行速度が遅い.
一方、StringBuilderとStringBufferのオブジェクトは変数であり、変数を操作することは、作成や回収の操作を行わずにそのオブジェクトを直接変更することであるため、Stringよりも高速です.
また、文字列に値を割り当てる場合もあります.
1 String str="abc"+"de";
2 StringBuilder stringBuilder=new StringBuilder().append("abc").append("de");
3 System.out.println(str);
4 System.out.println(stringBuilder.toString());
このように出力結果も「abcde」と「abcde」であるが、Stringの速度はStringBuilderの反応速度よりずっと速い.これは1行目の操作と
String str=“abcde”;
全く同じなので、すぐに、次のような形に書くと
1 String str1="abc";
2 String str2="de";
3 String str=str1+str2;
では、JVMは上記のようにオブジェクトを作成・回収し続けていきます.スピードが遅くなります.
2.さらにスレッドセキュリティ
スレッドセキュリティではStringBuilderはスレッドが安全ではありませんが、StringBufferはスレッドが安全です.
StringBufferオブジェクトが文字列バッファで複数のスレッドで使用されている場合、StringBufferではsynchronizedキーを持つ方法が多いため、スレッドが安全であることが保証されますが、StringBuilderの方法ではキーワードがないため、スレッドの安全が保証されず、エラーが発生する可能性があります.したがって、複数スレッドの操作を行う場合はStringBufferを使用しますが、単一スレッドの場合は、比較的高速なStringBuilderを使用することをお勧めします.
3.Stringをまとめる:少量の文字列操作に適用する場合
StringBuilder:単一スレッドで文字バッファを大量に操作する場合に適用
StringBuffer:マルチスレッドで文字バッファで多数の操作を行う場合に適用