1.①String類是不可變類,而StringBuffer\StringBuilder是可變類
示例
String a = "123"; //1
a = "456"; //2
以上代碼,看似是a被從原本的"123"修改爲了"456",其實並不是,
在代碼行2,對a進行“賦值”操作,其實是創建了一個新的String對象,
並且a指向新創建的這個對象,原來的對象直到被回收之前仍會存在。
②而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方法,最後調用StringBuffer的toString()方法把結果返回
牽扯到一個知識點append方法
代碼
x.append(str); //給字符串a追加子串str
在添加字符串的操作上,String性能不及StringBuffer,如果這種操作較多的話(如循環)建議使用StringBuffer。
StringBuilder性能比StringBuffer更強,但線程不夠安全
——————————————分割線———————————————
2.StringBuilder和StringBuffer非常類似
但因爲StringBuffer的所有方法中都添加了synchronized關鍵字,也就是給這個方法添加了一個鎖,用來保證線程安全。
所以StringBuffer的速度略慢,但線程安全。
而StringBuilder沒有上述關鍵字,故性能略高。
——————————————分割線———————————————
3.關於二者均包含的的reverse()方法的反轉字符串的功能的示例及解釋
示例
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()是將StringBuffer以String類形式輸出,返回給reverse_ans;
——————————————分割線———————————————
4.關於利用 String 的 toCharArray 方法先將字符串轉化爲 char 類型數組的反轉字符串方法
以做題的形式實現。
問題:
用戶從鍵盤輸入一個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 //錯!
因爲a和b都是字符串String類型,如果用==判斷兩個字符串是不是相等,只是判斷的他們的引用是否相等。這是不對的。
想要判斷他們的內容是否相等,應該用a.equals(b)判斷。
——————————————分割線———————————————
5.利用toCharArray()方法來將String字符串轉化爲char數組,後反轉
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.利用String的CharAt方法,將字符串挨個取出後附加
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);
}
}