1. 不可變String
String對象是不可變的。String類中每個看起來會修改String值的方法,實際上都是創建了一個全新的String對象,以包含修改後的字符串內容。而最初的String對象則絲毫未動。
public class Welcome{
public static String upcase(String s) {
return s.toUpperCase();
}
public static void main(String[] args) {
String q = "howdy";
String qq = Welcome.upcase(q);
System.out.println(qq);
System.out.println(q);
}
}
/*
HOWDY
howdy
*/
解釋:當把q傳給upcase()方法時,實際傳遞的是引用的一個拷貝。其實,每當把String對象當做方法的參數時,都會複製一份引用,而該引用所指的對象其實一直待在單一的物理位置上,從沒動過。
回到upcase()的定義,傳入其中的引用有了名字s,只有upcase()運行的時候,局部引用s才存在,一旦upcase()運行結束,s就消失了。upcase()的返回值,其實只是最終結果的引用,這足以說明,upcase()返回的引用已經指向了一個新的對象,而原本的q則還在原地。
2. 重載"+"與StringBuilder
String對象可以用“+”來連接。這裏是重載了"+"。其內部實現是創建一個StringBuilder對象,用以構造最終的String,併爲每個字符串調用一次StringBuilder的append()方法,最後調用toString()方法生成結果。
注意:如果你要在toString()方法中使用循環,最好自己創建一個StringBuilder對象,用它來構造最終的結果。
StringBuffer是線程安全的。
3.格式化輸出
3.1 System.out.format()方法:
System.out.format("[%d %f]",x,y);輸出整數x,和float型y。
3.2 String.format("[%d %f]",x,y):一個靜態方法,只返回一個String對象。
4. 正則表達式
用法:String s
s.matches("正則表達式");輸出true或false
5. 關於字符串轉換
5.1 字符串轉數組
char[] chars = String.tocharArray();
5.2數組轉字符串
靜態化方法:Arrays.toString(數組) 數組的類型可以爲int[]、short[]、double[]、char[]等,但toString()方法是帶格式的,也就是{"a","b","c"}說輸出的是[a, b, c]
靜態化方法:String str = String.valueOf(數組); 該數組類型可以爲char[]並不支持int[]、float[],該返回格式爲直接的一個字符串。
5.3數值型字符串轉數值
若轉爲int,使用int value = Integer.parseInt(s);
若轉爲double,使用double value = Double.parseDouble(s);
數值轉字符串:String s = number+"";