JAVA プラットフォームには、文字列、つまり複数の文字を含む文字データを格納および操作できる String と StringBuffer の 2 つのクラスが用意されています。 String クラスは、数値的に不変の文字列を提供します。
この StringBuffer クラスによって提供される文字列が変更されます。文字データが変更されることがわかっている場合は、StringBuffer を使用できます。通常、文字データを動的に構築するには StringBuffers を使用します。
Javaにはキャラクターの操作を担当するクラスが3つあります。
1.Character は単一の文字を操作し、
2.String は文字列を操作します。不変クラス。
3.StringBuffer も文字列を操作しますが、これは変数クラスです。
String:
はプリミティブ型ではないオブジェクトです。
作成された値は変更できません。
既存の String オブジェクトを変更するには、新しいオブジェクトを作成してから、
StringBuffer:
コンストラクターを通してのみ作成できます。
StringBuffer sb = new StringBuffer();
注: オブジェクトの作成後、値シンボルを通して支払うことはできません。
sb = "welcome to here!";//error
、メモリはメモリ空間に割り当てられ、最初は null を保存します。 StringBuffer
に値を支払うとき、その append メソッドを使用できます。
sb.append("hello");
上記は抜粋です。以下は私自身の追加の洞察です:
アドレスは変更できませんが、長さと内容は変更できます。 append() メソッドは、予約されたメモリを超えた場合にメモリを 2 倍に追加します。
効率の比較: StringBuffer は String よりも優れています。 StringBuffer にはスペースが予約されており、追加が繰り返されるため、1 つのオブジェクトに対してのみ動作します。文字列は変更できず、変更するにはオブジェクトを繰り返し作成することしかできません。 ——文字列の追加、置換、変更、挿入、削除を頻繁に行う場合は、StringBuffer を使用するのが最適です。 String を使用する必要がある場合は、StringBuffer を使用して toString() を呼び出し、String に変換できます。
コードは次のとおりです:public static void main(String[] args) {
String a="";
long begin=System.currentTimeMillis();
for (int i = 0; i <10000; i++) {
a+=i;
}
long end=System.currentTimeMillis();
System.out.println("String运行时间:"+(end-begin));
System.out.println("-----------------");
StringBuffer b=new StringBuffer();
long begin2=System.currentTimeMillis();
for (int i = 0; i <10000; i++) {
b.append(i);
}
long end2=System.currentTimeMillis();
System.out.println("StringBuffer运行时间:"+(end2-begin2));
}
私のマシンはかなりゴミで、実行後の結果は
文字列実行時間: 164593
-----------------StringBuffer 実行時間: 31
そして、String には contains メソッドがありますが、StringBuffer にはありません。 contains は「含む」という意味です。ここで contains メソッドを思い出すことができます
コードは次のとおりです:
public static void main(String[] args) { String a="abc"; boolean str=a.contains("b"); System.out.println(str); }
実行結果は
true
です。以上がjava_StringとStringBufferの差分分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。