考慮兩個scenarios-如果我可以改變它的值,String是不可變的嗎?我明白,我只是改變參考,但爲什麼第一種情況不起作用?
場景1:
class S{
String s="hello";
s="world";
System.out.println(s);
}
public class StringImmutable{
public static void main(String args[]){
}
結果 - 它拋出在pkg.StringImmutable.main(StringImmutable.java:12)未編譯的代碼錯誤
但是當我做到這一點 -
class S{
String s="hello";
void change(){
s="world";
System.out.println(s);
}
}
public class StringImmutable{
public static void main(String args[]){
S s=new S();
s.change();
}
}
Result- world..it工作得很好。
如何爲String不可改變此處輸入代碼
您需要區分變量與對象。 –
如果一個字符串是不可變的,那麼's1 =「hello」; S2 = S1; s2.change();'也會改變s1。你正在做的是將s改成**指向**另一個字符串 –
當你做's =「world」時,'s'開始指向一個新的String對象(「world」)。 '「hello」'留在內存中,稍後會被GCed。 – Abhi