1.①Stringクラスは不変クラス、StringBufferの\ StringBuilderの変数クラスです
例
String a = "123"; //1
a = "456"; //2
上記のコードは、一見「456」に元の「123」から変更されている、それは、実際にはない
「割り当て」操作を実行するために、2行目に、実際には、新しい文字列オブジェクトを作成し、
点新しく作成されたオブジェクトは、元のオブジェクトがまだ回収されるまで存在します。
②のStringBuilder \ StringBufferのは、変数の型である
彼らは、文字列変数の対象となった、である、それは目標が、元のオブジェクトに基づいて、新たな接続文字列を再生成しません。
③しかし追加操作の場合
String x ="abc";
x+="defg";
以下に正式同等
StringBuffer a = new StringBuffer("abc");
//创建一个StringBuffer类的对象a
a.append("defg"); //给字符串a的结尾追加字符串"defg"
x = a.toString(); //将a以String形式赋给x
StringBufferの文字列の変更は、最初にStringBuffer、コールが続いたStringBufferのappendメソッドを作成することです、のtoStringのStringBuffer()メソッドの最後の呼び出しは、結果を返します
知識のappendメソッドを必要とします
コード
x.append(str); //给字符串a追加子串str
(例えばリサイクルなど)などの操作複数の単語がStringBufferのを使用することを推奨されている場合の追加の文字列操作では、文字列のパフォーマンスは、以下のStringBufferよりもあります。
StringBuilder StringBufferの強い性能比ではなく、十分なスレッドの安全性
--------------- --------------分割ライン
2.StringBuilderとStringBufferの非常に類似した
が、StringBufferのすべてのメソッドがsynchronizedキーワードに追加されているので、このメソッドは保証スレッドセーフにロックを追加することです。
StringBufferのようにわずかに遅いが、スレッドの安全性。
少しでもない、上述したキーワードのStringBuilder、そうパフォーマンス。
--------------- --------------分割ライン
文字列と説明を逆転の両方に含まれる()関数の例示的な方法を逆に関連して3
例
public class Test{
public static void main(String args[]){
String ans = "Mustang";
String reverse_ans = new StringBuffer(ans).reverse().toString();//1
System.out.println(reverse_ans);
//最终输出gnatsuM
}
}
ライン1つのtoString()で、reverse_ansに戻される出力のStringBuffer Stringクラスです。
--------------- --------------分割ライン
文字列型配列反転方式に最初の文字列に関して4.文字列toCharArrayメソッド使用
行う質問の形で実現します。
問題:
1〜9999の間の数から、ユーザーのキーボード入力は、数が少ないと判断し、番号がパリンドロームであるか否かを判断します。回文番号と取得する逆の順序で含まれている元のデジタル数の同じ数を指し、例えば、12121,3223パリンドロームです。
コード
import java.util.*;
public class Test{
public static void main(String args[]){
Scanner reader = new Scanner(System.in);
String x = reader.nextLine();
char []arr = x.toCharArray();
String ans = "";
for(int i =arr.length-1;i>=0;i--)
ans = ans+arr[i];
if(ans.equals(x)) //1111111111
System.out.println("是回文数");
else
System.out.println("不是回文数");
}
}
分析ANS xはアノテーションプロセスに等しくなります
a.equals(b);
代わりに
a==b //错!
文字列は==分析2である場合、bは、String型の文字列であるので等しく、それらが等しい基準であるか否かを決意されていません。これは間違っています。
彼らは、内容が同じである、a.equals(b)で判断されるべきかどうかを決定します。
--------------- --------------分割ライン
反転後の文字列に文字列に文字列の5. toCharArray()メソッド
String a = "123456";
char [] x = a.toCharArray();
String ans = "";
for(i=x.length;i>=0;i--)
ans = ans+x[i];
System.out.println(ans);//得到反转字符串654321
--------------- --------------分割ライン
文字列の6.キャラットこの方法は、一つの追加の文字列ずつ取り出し
public class Test{
public static void main(String args[]) {
String reverse = "";
String str = "abc";
int length = str.length();
for (int i = length-1; i >= 0; i--) {
reverse = str.charAt(i) + reverse;
}
System.out.println(str);
}
}