我正在尝试将一个int的2d数组复制到另一个数组中,以便在修改复制的数组时,原始数组不受影响

            int[][] t3 = new int[][]{
            {1,2,3},
            {0,4,6},
            {7,8,9}
        };
        show(t3);

        int[][] t4 = new int[t3.length][t3[0].length];
        System.arraycopy(t3, 0,t4 ,0, t3.length-1);
        show(t4);

        t3[0][0]=99;
        show(t3);
        show(t4);


但是,原始文件在这里被修改了

t3
1 2 3
0 4 6
7 8 9

t4
1 2 3
0 4 6
0 0 0

t3 modified
99 2 3
0 4 6
7 8 9

t4
99 2 3
0 4 6
0 0 0


我尝试了clone(),仍然是相同的行为

为什么是这样?任何想法如何保持原始不变?

最佳答案

您只是将一维数组引用处理为新数组t4。这就是为什么您的参考t4仍然指向旧的1d数组。

您应该使用循环来替换“更深”的数组:

for (int i = 0; i < t3.length; i++) {
    System.arraycopy(t3[i], 0, t4[i], 0, t3[0].length);
}

关于java - 修改Java中复制的2d数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15334171/

10-11 04:59