あまりにも長いバージョンを見てはいけません
文字列の連結速度:StringBuilderの>のStringBuffer>文字列
StringBuilder StringBufferの非スレッドセーフスレッドセーフ
テキスト
、Stringクラス
オブジェクトが破棄されるまで。1、Stringクラスは不変クラス、文字列を一度作成された、このオブジェクトに含まれる文字列は、不変です。
文字の配列を格納することにより、文字列の文字列クラス。
/** 用于字符存储. */
private final char value[];
/**
* Initializes a newly created {@code String} object so that it represents
* an empty character sequence. Note that use of this constructor is
* unnecessary since Strings are immutable.
*/
public String() {
this.value = "".value;
}
文字列は、それが動作するように、新しい文字列を返し、文字列の他の方法では、文字列は、新しい()新しいれる返さ。
2、文字列定数プール
また、文字列バッファと呼ばれる文字列プール(文字列プール)Javaランタイムを、維持します。記憶動作、およびセルの文字列が繰り返されていないとき、様々な文字列が生成されました。
3は、Stringオブジェクトは、原則として作成されます
1)場合の任意の手段を使用する場合、Javaランタイムは、(実行中のJVM)コンテンツの文字列オブジェクトの同じプールが存在するかどうかを見て、そうでない場合、次いで、プール中のS、この文字列を保持する文字列オブジェクトSを作成します文字列sを作成し、それ以外の場合は、プールに追加されません。
2)Javaは、限り、オブジェクトが新しいキーワードを使用して作成されるように、それは()ヒープ内の新しいオブジェクトを作成します。
3)使用して直接指定するか、またはStringオブジェクトのみ保守点検文字列の文字列プールを作成するために、純粋な文字列連結を使用して、プールが作成されていない場合は、プール内に作成されませんが、決してではありませんスタック領域は、再びStringオブジェクトを作成します。
4)変数を含む式を使用して文字列オブジェクトを作成し、文字列のプールの維持を確認するだけでなく、スタック領域内の文字列オブジェクトを作成するだけでなく。ヒープを指すメモリ内の最後のオブジェクト。
@Test
public void stringTest(){
String s1 = "hello world";
String s2 = "hello world";
String s3 = new String("hello world");
System.out.print(s1==s2);
System.out.print(s1==s3);
System.out.print(s2==s3);
}
結果は偽、偽、真です。
二、StringBufferをとのStringBuilder
継承AbstractStringBuilderクラス、実装および使用は同じです。唯一の違いは、StringBufferの方法は、キーワード、スレッドセーフを同期追加し、ですが、StringBuilderのは、StringBuilderの文字列の連結に高速にStringBufferよりも非スレッドセーフですが、
StringBuilder StringBufferの速度の利点と比較して、ほとんどの場合、StringBuilderクラスを使用することをお勧めします。ただし、アプリケーションの場合は、スレッドセーフ必要で、あなたはStringBufferクラスを使用する必要があります。
国民の関心番号へようこそ。