【发布时间】:2016-07-04 18:46:51
【问题描述】:
我在该主题上找到了this 线程,我想知道为什么在 Java 中替换 List 中的值如此困难。
我的代码看起来很丑:
List<String> stringList = new ArrayList<>();
// ... add some elements
for (int i = 0; i< stringList.size(); ++i) {
if (stringList.get(i).contains("%")) {
stringList.set(i, stringList.get(i).replace("%", backupStorePath));
}
}
这真的是唯一的方法吗?为什么我不能使用 foreach 循环?
for (String command : stringList) {
command = command.replace("%", backupStorePath);
}
这一定是java的“按值复制”问题,String是不可变的,但为什么要这样实现呢?为什么command 是原始引用的副本而不是原始引用本身?
【问题讨论】:
-
不变性不是这里的问题。
command是一个变量,它引用了列表的第 n 个元素,但是给这个变量分配一个不同的值只会导致它引用其他东西,对列表没有任何影响。
标签: java list immutability pass-by-value