[英]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.