我有以下代码
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对象?
我的错在哪里?
更新数组中字符串的最佳方法是什么?
在循环中,我将一个新的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)