、文字列型
文字列型は、参照型であるが、このクラスは、最終的な変形例であり、最終的なクラスは、サブクラス化することができません。
初期化文字列がもはや変更できないと、文字クラスの文字列[]配列の保存されたコンテンツので、最終的な修飾は、もその不変ので、およびchar配列とプライベートStringクラスが変更正方形アレイ値を提供しないので、その文字列は不変です。
文字列は不変なので、それを共有することができます。
二、StringクラスのAPI
1.compareTo
2つの文字列を辞書的に比較します。各ユニコード文字列の比較値に基づいています。
2つの文字列が異なっている、または先頭のインデックスとした場合、彼らは別の文字を持っている、またはそれらは異なる長さを有し、またはその両方。インデックスの問題は、より多くのインデックス文字である場合this.charAt(k)-anotherString.charAt(k)
。同じ代表は、0未満はそれが辞書の文字列パラメータ文字列以上である0よりも大きい場合、文字列パラメータ辞書順未満を示し、0に等しいです。
彼らはインデックス位置、フィールドオーダーの再文字列の前の長い短い文字列と異なっていない場合。
2.toLowerCase
この文字列内のすべての文字を小文字にします。
3.toUpperCase
この文字列内のすべての文字が大文字に変換されています
4.trim
先頭と末尾の空白を無視して、文字列のコピーを返します。
5.toCharArray
この文字列を新しい文字配列に変換します
6.split
この文字列を分割するためのマッチング与えられた正規表現
7.substring
新しい文字列を返し、彼は文字列のこのシーケンスのサブシーケンスであります
8.concat
指定された文字列は、文字列のこの端部に接続されています。
9.indexOf
この最初のインデックスに表示される文字列を返します。
10.intern
String s1 = new String("aaa");
String s2 = s1.intern();
「AAA」の引用符で囲まれた文字列定数プールがあれば、その後の参照に戻ります
参照文字列の定数プール「AAA」が存在しない場合、それは定数プールS1、S1およびリターンに追加されます。
第三に、文字列の比較
1.直接割り当てによって作成された2つの文字列オブジェクトを比較
直接割り当てプロセスは、文字列オブジェクトを作成するには:まず、文字列定数プール内の同じ文字列値の存在への参照を探し、参照への直接のリターンがある場合、そのオブジェクトを作成し、文字列定数プールに追加されていない場合は、その参照を返します。
注意: Stringクラスは、それが比較方法が同じである文字列の値に等しく、equalsメソッドおよびhashCodeメソッドをオーバーライドします。
2.作成し、比較するために、新たな直接割り当てを作成します。
作成された新しいプロセスは:String s3 = new String("test");
1を繰り返し、最初に「テスト」を解決する、プロセスを理解して、文字列オブジェクトの文字列と等しい値を作成します。
// 比较两个通过直接赋值创建的字符串对象
String s1 = "test";
String s2 = "test";
System.out.println(s1 == s2);//true
System.out.println(s1.equals(s2));//true
// 一个通过直接赋值创建的字符串对象和一个用new创建的字符串对象之间的比较
String s3 = new String("test");
System.out.println(s1 == s3);//false
System.out.println(s3.equals(s1));//true
// 两个用new创建的字符串对象之间的比较
String s4 = new String("test");
String s5 = new String("test");
System.out.println(s4 == s5);//false
System.out.println(s4.equals(s5));//true
// 测试String的intern方法
String s6 = s5.intern();
System.out.println(s1 == s6);//true
四、StringBuilderを、StringBufferの
StringBuilderはスレッドセーフです。StringBufferのは、スレッドセーフです。文字の可変配列。
主なAPIは、挿入して追加することです
追加コンテンツを追加し、コンテンツを挿入するために挿入します。
+の文字列連結の原理を利用して五、文字列
中間のStringBuilder Stringオブジェクトの実装として使用します。
String str1 = "nishizhuma";
String str2 = "geiniqidaiergeng";
String str3 = str1 + str2;
System.out.println(str3);
上記プロセス達成底に変換することができます。
String str1 = "nishizhuma";
String str2 = "geiniqidaiergeng";
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(str1);
stringBuilder.append(str2);
String str3 = stringBuilder.toString();
六の速度比較
文字列の連結を使用して文字の文字列+数を比較して、StringBuilderのはスピードをスプライス追加
String s1 = new String("begin");
long timeBegin = System.currentTimeMillis();
for(int i = 0; i < 100000; i++) {
s1 += i;
}
long time = System.currentTimeMillis() - timeBegin;
System.out.println("string对象" + time);
StringBuilder s2 = new StringBuilder("begin");
long timeBegin1 = System.currentTimeMillis();
for(int i = 0; i < 100000; i++) {
s2.append(i);
}
long time1 = System.currentTimeMillis() - timeBegin1;
System.out.println("stringBuilder对象" + time1);
結果は、StringBuilderの文字列がより優れていることを示しました。
への文字列の連結の量が多い場合には、StringBuilderのを使用することをお勧めします
七つの空のオブジェクトスプライシング
StringBuilderのは、null文字列スプライシング空のオブジェクトをスプライスします。StringBuilderの使用は+ステッチが実装付加するので、同様にステッチ+。
ソースコード
public AbstractStringBuilder append(String str) {
if (str == null)
return appendNull();
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars(0, len, value, count);
count += len;
return this;
}
4.String、StringBufferを、StringBuilderの