循环结构内外的Java字符串数组启动

adj*_*fac 2 java arrays string arraylist

在下面的代码中

    // Assume there are non-null string arrays arrayA and arrayB 

    // Code 1
    ArrayList<String[]> al = new ArrayList<String[]>();
    String[] tmpStr = new String[2];
    for (int ii = 0; ii < arrayA.length; ii++) {
            tmpStr[0] = arrayA[ii];
            tmpStr[1] = arrayB[ii];
            al.add(ii, tmpStr);
    }

    // Code 2
    ArrayList<String[]> al = new ArrayList<String[]>();

    for (int ii = 0; ii < arrayA.length; ii++) {
            String[] tmpStr = new String[2];
            tmpStr[0] = arrayA[ii];
            tmpStr[1] = arrayB[ii];
            al.add(ii, tmpStr);
    }
Run Code Online (Sandbox Code Playgroud)

代码2给出了想要的结果 - 也就是说,现在每个索引包含{arrayA(ii),arrayB(ii)}.但是,在代码1中,al包含所有索引的{arrayA(last_index),arrayB(last_index)}.这是为什么?

Yan*_*min 5

Java数组是可变的.您的代码多次添加单个数组,并在每次迭代时修改相同的数组.