可以證明,字符串操作是計算機程序設計中最常見的行爲。——摘自《java編程思想》
英文:String manipulation is arguably one of the most common activities in computer programming. ——摘自《Thinking in Java》
上面這句話是Bruce Eckel(作者,絕對的牛人),在《Java編程思想》書中開講String時的第一句話。其實不只是java語言,在任何編程語言中,數據處理無外乎就是處理字符串和數字。而在Java中,對於字符串的處理很大最直接的就是String類(其他還有StringBuilder、StringBuffer類以及正則表達式的應用),最基礎的也是String類,所以我們很有必要搞清楚Java中String的特性和實現機制。
1. String的基本介紹
String按照字面理解,就可知道代表一串字符。我總結了對字符串最多的操作,見下表。如有遺漏,請大家指正啊。
說明:在下表中,爲了方便書寫,方法的參數省略,參數的詳細信息參考Java API。
獲取信息操作 | ||
字符串長度 | length() | |
比較字符串引用 | “==” | |
比較字符串內容 | equals() 或 compareTo() | |
已知位置,找字符 | charAt() | |
已知字符(串),找位置 | indexOf() 或 lastIndexOf() | |
判斷開頭和結尾 | startWith() 或 endWith() | |
其他類型轉換爲字符串 | valueOf() | |
更改操作 | ||
連接字符串 | “+” 或者 concat() | |
替換子字符串 | replace() | |
獲取子字符串 | subString() | |
分割字符串 | split() | |
更換大小寫 | toUpperCase()、toLowerCase() | |
去除空白符 | trim() |
String是常量,我們常稱其爲不可變性,意思是一旦創建就不能更改。
所以對於上面的“更改操作”,返回值都是字符串,但並不是對源字符串進行更改,而是返回了新的字符串。下面有測試代碼。
小實驗:如果查看Java API文檔中對String的方法的說明,會發現用了很多的“return a new String ”。
2. 驗證String的不可變性
所謂String的不可變性,是說一旦字符串被創建,對其所做的任何修改都會生成新的字符串對象。
代碼如下:
public static void main(String[] args) {
String a = "abc";
String b = a.toUpperCase();
System.out.println("a: " + a);
System.out.println("b: " + b);
System.out.println("a==b: "+ (a==b));
//當a不發生變化時,不返回新字符串。
String c = a.toLowerCase();
System.out.println("c: " + c);
System.out.println("a==c: "+ (a==c));
}
運行結果:
a: abc
b: ABC
a==b: false
c: abc
a==c: true
運行結果分析:
字符串a指向"abc",全爲小寫;字符串b由a得來,指向"ABC";這時a的內容並沒有變化,也就證明了Java中String的不變性。
後面利用"a==b"來判斷a,b是否指向同一個對象,返回值爲false,也能證明String的不變性。
對於字符串c的例子說明如果a沒有發生變化,那麼不返回也不需要返回新字符串,所以"a==c"的返回值爲true。