我知道Java字符串是不可变的。但是,当我运行下面的函数时,输出结果并不是我期望的结果。String不变性问题
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";
}
我得到的输出为wicked sod
,而不是wicked witch
,我希望它是。是否因为我传递一个数组引用作为修改函数的第二个参数,而不是传递String对象本身?任何澄清高度赞赏。
谢谢乔恩!这使我对我的下一个qn-不是对象也是对字符串的引用?那么s与ss [0]有什么不同呢? – OckhamsRazor
@OckhamsRazor:将值赋给's'只会改变参数的值。赋值给'ss [0]'会改变'ss'引用的数组的值。 –
啊我明白了 - 这意味着阵列本身并不包含字符串;相反,数组的内容存储对字符串的引用? – OckhamsRazor