string s = "hello";
s = s + " world!";
這兩行**執行後,原始的string物件中的內容是否改變?
不會改變。因為string類為final型別,它的所有物件都是不可變物件。在這段**中,s原先指向乙個string物件,內容是」hello」,它在字串常量池中。然後我們對s進行了+操作,這時s不再指向原來那個物件了,而指向另乙個string物件,內容為「hello world!」,原來那個物件還存在於記憶體之中,只是s這個引用變數不再指向它了。
因為string物件建立之後不能再改變,所以對於每乙個不同的字串,都需要乙個string物件來表示,這會造成很大的記憶體開銷,這時,應該考慮stringbuffer類,它允許修改,而不是每個不同的字串都要生成乙個新的物件。
可變物件,不可變物件
不可變物件為字串,元組等 可變物件為列表,字典,集合等。淺拷貝只是對已經存在的記憶體新增加乙個物件引用。深拷貝就是重新申請乙個新的記憶體,使這個是新物件是新記憶體位址的引用。對於可變物件引用時時經常出現。考慮以下兩段 1 l for i in range 10 num i print l 結果 2 ...
String的不可變
string是被final修飾的類,所有看起來會修改string值的方法都是建立了乙個新的string物件。所以這裡要注意的是,string型別例項的傳遞永遠是值傳遞,而不是引用傳遞如下 public class testdemo nimaha nimaha new nimaha public st...
可變物件和不可變物件
要理解可變物件和不可變物件,先要理解final關鍵字。參考此部落格 沒有經過原博主的同意便引用了一些,侵刪!final關鍵字可以用來修飾類 方法和變數 成員或區域性 final修飾類時表明這個類不能被繼承。final類中的方法會被隱式的定義為fianl,變數自行定義需要不要被final修飾。fina...