Java中的String的 方法歸類 及其 不可變性

       可以證明,字符串操作是計算機程序設計中最常見的行爲。——摘自《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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章