更改Java列表中的引用

das*_*ort 1 java list

我在某种程度上感到愚蠢地问这个问题,但是

为什么不能使用EnhancedForStatementList手动更改对象的引用?

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);
}
Run Code Online (Sandbox Code Playgroud)

将打印,[AAA, BBB, CCC]因为对第二个元素的引用没有改变,正如人们所预料的那样.

但是为什么我不允许(或者是List错误的类型?)手动更改列表条目的引用?此示例中的字符串可以是任何复杂类型,此问题与更改a中的引用有关List.

编辑:好的,也许很清楚为什么它的工作方式有效,但我怎样才能完成参考变更?我无法相信任何子类型都List无法改变任何元素的引用.

edit2:所以在使用EnhancedForStatement时无法更改引用?

Era*_*ran 5

s 是一个String变量,分配给它不会影响列表.

为了更改列表,调用list.set(1,"QQQ");,这会将新的String作为列表的第二个元素.