Java 奇怪的行为是修改列表

Java 奇怪的行为是修改列表,java,Java,我最近写了一个方法来连接一些文本文件中的值,然后修改我想要的值。在我编写的方法中,我在下面的代码中获得了“数组索引”: String[] s = new String[] {"Value1", "Value2",...} List<List<String[]>> Temp = new ArrayList(); for (List<String[]> i : JL) { List<String[]> _Temp = new

我最近写了一个方法来连接一些文本文件中的值,然后修改我想要的值。在我编写的方法中,我在下面的代码中获得了“数组索引”:

  String[] s = new String[] {"Value1", "Value2",...}
  List<List<String[]>> Temp = new ArrayList();
  for (List<String[]> i : JL) {
        List<String[]> _Temp = new ArrayList();
        for (String[] x: i) {
            for (String y : s) {
                if (x[0].equals(y))
                    _Temp.add(x);
            }
        }
        _Temp.get(10)[0] = "Some Value"; // Index out of the array error (_Temp lenght is 12)
        // _Temp.get(10) has 2 indexes     
       Temp.add(_Temp);         
    }
这是怎么发生的?修改值的两种方法完全相同

演示:

好吧

  • 这两个代码段都不能确保
    \u Temp ArrayList
  • 替换代码段在
    Temp
    上工作,而失败代码段在
    \u Temp
    上工作

如果变量的名称不是那么糟糕,那么理解问题就容易多了。而不是<代码> TEP> <代码>,<代码> >临时> <代码>,<代码> > <代码>,考虑<代码>文件< /代码>,<代码>行>代码>代码>列>代码>,或它们是什么。@博恩:尽管你可能是对的,但我对它们理解得很好,它们与你的问题无关。但是那些试图帮助你的人没有。@pierre,显然你没有!你把
\u Temp
Temp
的元素混在一起@Boann:不,我发现了,在第一个方法中,我替换了
\u Temp.get(10)[0]=“Some Value”System.out.ptintln(_Temp.get(10)[0])
进行编码,我可以看到值。“=”操作符对列表做了一些不好的事情,比如副作用。我通过在控制台中输出列表大小来检查它
    for (List<String[]> x : Temp) {
        x.get(10)[0] = "Some Value";
    }