[英]String immutability question
我知道 Java 字符串是不可變的。 但是,當我運行下面的 function 時,output 並不是我所期望的。
public static void main(String[] args) {
String s = "wicked";
String [] ss = new String [1];
ss[0] = "witch";
modify(s, ss);
System.out.println(s+" "+ ss[0]);
}
private static void modify(String s, String[] ss) {
s = "sad";
ss[0] = "sod";
}
我得到的 output 是wicked sod
,而不是我預期的wicked witch
。 是否因為我將數組引用作為第二個參數傳遞給修改 function 而不是傳遞字符串 object 本身? 任何澄清都非常感謝。
您已更改數組的內容 - arrays 始終是可變的。
該數組最初包含對字符串“witch”的引用。 您的modify
方法將數組更改為包含對字符串“sod”的引用。 沒有任何字符串本身被更改 - 只是數組的內容。
(請注意, ss[0]
的值不是字符串 - 它是對字符串的引用。)
是否因為我將數組引用作為第二個參數傳遞給修改 function 而不是傳遞字符串 object 本身?
確切地。 您正在傳遞對可變 object (數組)的引用。 當方法更改此 object 時,更改將在方法外部可見。
閱讀一篇關於通過 Yoda 傳遞方法參數的非常好的文章Java 中的參數傳遞 - 通過引用還是通過值?
字符串不可變意味着您不能將“hello world”更改為“hello”。 但是您可以分配一個全新的字符串。 這就是你在這里所做的。
您正在引用數組 object。 這就是改變數組內容的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.