參考資料:網易雲網課李興華:http://study.163.com/course/courseMain.htm?courseId=1455026 一、字元串一旦定義不可改變 一開始也許並不太好理解,先觀察以下代碼 結果: 以上代碼似乎主觀上覺得String內容不是改變了嗎,但並不是這樣的,下麵通過 ...
參考資料:網易雲網課李興華:http://study.163.com/course/courseMain.htm?courseId=1455026
一、字元串一旦定義不可改變
一開始也許並不太好理解,先觀察以下代碼
public class B { public static void main(String[] args) { String str = "Hello"; str = str + "world"; System.out.println(str); } }
結果:
Helloworld
以上代碼似乎主觀上覺得String內容不是改變了嗎,但並不是這樣的,下麵通過記憶體圖分析
當執行str = str + “Word”語句時,原先指向“hello”的指針會斷開,重新指向“hello”與“world”所連接的字元串,並且之前的“hello”與“world”成了垃圾。也就是說,字元串內容並沒有改變,只是引用關係變了。
由於執行以上代碼會產生垃圾,如果頻繁使用“+”與字元串連接,所產生的垃圾的量也會是巨大的,會消耗大量資源,所以應當避免頻繁該操作。
二、String類的特點
(1)String類對象的相等判斷使用equal()方法完成,“==”實現的是地址數值的比較。
(2)字元串內容一旦聲明則不可改變,String類對象內容的改變是依靠引用關係的改變實現的。
(3)String類有兩種實例化方式,使用直接賦值可以不產生垃圾空間,並且可以自動入池,不要使用構造方法。