Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中正确复制对象?_Java_Arrays_Multidimensional Array - Fatal编程技术网

如何在java中正确复制对象?

如何在java中正确复制对象?,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我参加过这个小项目,花了20个小时来解决代码中的一个主要问题,但没有任何运气或结果。现在我发现真正的问题是复制函数不能正常工作 我做错了什么 这是我针对具体问题所做的示例: package cloneobject; import java.util.Arrays; public class CloneObject { /** * @param args the command line arguments */ public static void ma

我参加过这个小项目,花了20个小时来解决代码中的一个主要问题,但没有任何运气或结果。现在我发现真正的问题是复制函数不能正常工作

我做错了什么

这是我针对具体问题所做的示例:

package cloneobject;

import java.util.Arrays;

public class CloneObject {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        clone(new int[3][3]);
    }

    public static void clone(int[][] x) {
        int[][] y = (int[][]) x.clone();
        System.out.println("x=");
        PrintFieldImage(x);
        System.out.println("y=");
        PrintFieldImage(y);
        x[1][1] = 3;        
        System.out.println("x=");
        PrintFieldImage(x);
        System.out.println("y=");
        PrintFieldImage(y);
        y[2][2] = 4;
        System.out.println("x=");
        PrintFieldImage(x);
        System.out.println("y=");
        PrintFieldImage(y);
    }

    public static void PrintFieldImage(int[][] field) {
        if (field != null) {
            int x;
            for (x = 0; x < field.length; x++) {
                System.out.println(Arrays.toString(field[x]));
            }
        } else {
            System.out.println("no field!");
        }
    }
}
现在我希望x包含3,y包含4

请帮忙

仅克隆将执行浅层克隆。您正在克隆一个二维数组;数组的数组。将仅克隆顶级阵列。如果你想做一个深度克隆,你必须使用ol'for循环

另请参见

仅克隆将执行浅层克隆。您正在克隆一个二维数组;数组的数组。将仅克隆顶级阵列。如果你想做一个深度克隆,你必须使用ol'for循环


另请参见

二维数组实际上是数组的数组,因此数组的每一行都是它自己的参考变量。为了避免这个问题,您还需要将它们复制到新数组中,即深度复制。二维数组实际上是数组的数组,因此数组的每一行都是它自己的引用变量。您还需要将它们复制到新阵列中以避免此问题,即深度复制。
run:
x=
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
y=
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
x=
[0, 0, 0]
[0, 3, 0]
[0, 0, 0]
y=
[0, 0, 0]
[0, 3, 0]
[0, 0, 0]
x=
[0, 0, 0]
[0, 3, 0]
[0, 0, 4]
y=
[0, 0, 0]
[0, 3, 0]
[0, 0, 4]
BUILD SUCCESSFUL (total time: 0 seconds)
int[][] y = new int[x.length][];
for(int i=0; i<x.length; i++) {
    y[i] = x[i].clone();
}