我莫名其妙地觉得自己很蠢,问这个问题的参考,但更改Java列表
为什么不能使用EnhancedForStatement手改变一个List
引用一个对象?
private static List<String> list = new ArrayList<String>();
public static void main(String[] args) {
list.add("AAA");
list.add("BBB");
list.add("CCC");
for(String s : list){
if(s.equals("BBB")) s = "QQQ";
}
System.out.println(list);
}
将打印[AAA, BBB, CCC]
因为引用的第二个元素没有改变,作为一个可以预期。
但为什么我不允许(或者是List
错误的类型?)手动更改列表条目的引用?这个例子中的字符串可以是任何复杂的类型,这个问题是关于改变List
中的引用。
编辑:好的,也许它很清楚为什么它的工作方式,但我怎样才能完成参考改变?我无法相信List
的任何子类型都无法更改任何元素的引用。
edit2:所以使用EnhancedForStatement时无法更改引用?
但这样做在一个循环可能会导致ConcurrentModificationException的 – dkatzel 2014-11-06 15:24:56
你必须用自己的指数做一个for循环,让你知道要设置的指标。由于您没有使用迭代器,因此不会有ConcurrentModificationException。 – user12722 2014-11-06 15:29:31
我预计这种答案。这不是我所问的,看到编辑 – dasLort 2014-11-06 15:42:34