在java中,說String是不可變的,可是為什麼

2021-09-01 16:32:15 字數 609 閱讀 8126

假設string s=new string ("wo");string s1=new string("de");

s=s+s1;

system.out.println(s);結果為wode?

首先在棧中有個"s"變數指向堆中的"wo"物件...

棧中"s1"變數指向堆中的"de"物件

當執行到

s = s + s1;

系統重新在堆中new乙個更大的陣列出來,然後將"wo"和"de"都複製進去,

然後棧中的"s"指向這個新new出來的陣列...

所謂的不可變是指:它沒有在原陣列「wo」上進行修改,

而是新建了個更大陣列進行擴充套件,也就是說,這時候堆裡還是有「wo」這個物件陣列存在的,只不過這

個時候"s"變數不在指向"wo"這個陣列了,而是指向了新new出來的陣列,這就是和

stringbuffered的

區別,後者是在原陣列上進行修改,改變了原陣列的值,stringbuffered不是通過新

new乙個陣列去複製,而是在原陣列基礎上進行擴充套件...再讓變數指向原陣列....

你看的懂不?

不懂再問...

希望能對你有所幫助...

java中如何判斷String中的內容是否為數字

判斷字串是否是整數 public static boolean isinteger string value catch numberformatexception e 判斷字串是否是浮點數 public static boolean isdouble string value catch numb...

為什麼說String是不可變的

簡單的例子 string s1 abc string s1 s1 s1 def 此時s1變化了嗎?變了!s1的位址從指向 abc 變成指向 def 重要的不在這裡,記憶體上的 abc 本身並沒有被改變!指向 abc 的s2也沒有被改變 兩個final 乙個在string的類修飾符,乙個是string...

在sql中不指定Order by排序是按照主鍵嗎

在sql中不指定order by,排序是按照主鍵嗎?答案是不一定。舉個例子www.cppcns.com 查詢attendanceemprank表,主鍵是attendanceemployeerankid,而且是聚集索引 執行下面的語句,發現第一句不指定order by的結果跟第二句不一樣。再看看執行計...