Java引用未更新

mat*_*ias 0 java

我有以下代码

List<String> strings = new ArrayList<String>();
strings.add("a");
strings.add("b");
strings.add("c");

for (String s : strings) {
    s = new String("x");
}

System.err.println(strings);
Run Code Online (Sandbox Code Playgroud)

打印[a,b,c]

我认为它会打印[x,x,x],因为我遍历了Strings,它返回对String对象的引用.在循环中,我将一个新的Object分配给引用,因此s应该指向新的String对象?

我的错在哪里?

更新数组中字符串的最佳方法是什么?

Jon*_*eet 7

在循环中,我将一个新的Object分配给引用

好吧,你指定一个新的引用作为值s.s虽然只是一个局部变量,它是用元素的值初始化的.它与列表中的元素无关 - 这就是它初始化的方式.这有点像更改方法参数的值 - 不会更改用作参数的任何变量:

void method(String y) {
    y = "bar"; // This doesn't change x.
}
...

String x = "foo";
method(x);
System.out.println(x); // foo
Run Code Online (Sandbox Code Playgroud)

如果你想更新列表中的字符串(不是数组 - 值得清楚区别),你应该使用常规for循环:

for (int i = 0; i < strings.size(); i++) {
    strings.set(i, "x");
}
Run Code Online (Sandbox Code Playgroud)