按值复制数组失败(使用clone()或arraycopy())(Android,Java)

按值复制数组失败(使用clone()或arraycopy())(Android,Java),android,clone,arrays,Android,Clone,Arrays,为了制作保存值副本而不是引用的数组副本,我执行以下操作: int[][][] copy = {{{0}},{{0}},{{0,0}},{{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0}},{{0}},{{0,0}}}; System.arraycopy(spelerSpel, 0, copy, 0, spelerSpel.length); 然后更改副本中的值: copy[SPELER_NUMMER][0][0] = baanSpelerNummer; 此

为了制作保存值副本而不是引用的数组副本,我执行以下操作:

int[][][] copy = {{{0}},{{0}},{{0,0}},{{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0}},{{0}},{{0,0}}};
System.arraycopy(spelerSpel, 0, copy, 0, spelerSpel.length);
然后更改副本中的值:

copy[SPELER_NUMMER][0][0] = baanSpelerNummer;
此时,原始(spelerSpel)数组中包含相同的更改值,例如:

{{{4}},{{0}},{{0,0}},{{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0}},{{0}},{{0,0}}};
作为副本。我也尝试了.clone(),同样的结果。我做错了什么

顺便说一下,我的目标是Android API 8,它不支持数组。copyOf()。

System.arraycopy()
不支持深度拷贝,但它在简单数组的性能方面做得相当好

您可以将其与一些附加循环一起使用,以创建自己的多维
arraycopy3d()

public int[][]阵列复制3D(int[][]阵列){
int[][]复制=新int[array.length][];
for(int i=0;i
。您可能需要滚动自己的副本。实际上,结果(多维)副本是由arraycopy(以及clone())生成的(正确)。但问题是,它原来是一个引用副本,而不是我预期的值副本。副本构造函数()能帮上忙吗?在这种情况下,它是如何生成的?
public int[][][] arraycopy3d(int[][][] array) {

     int[][][] copy = new int[array.length][][];

     for (int i = 0; i < array.length; i++) {
         copy[i] = new int[array[i].length][];
         for (int j = 0; j < array[i].length; j++) {
             copy[i][j] = new int[array[i][j].length];
             System.arraycopy(array[i][j], 0, copy[i][j], 0, array[i][j].length);
        }
    }

    return copy;
}