Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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 Arrays.copyOf不返回对象的深度副本_Java_Arrays_Clone - Fatal编程技术网

Java Arrays.copyOf不返回对象的深度副本

Java Arrays.copyOf不返回对象的深度副本,java,arrays,clone,Java,Arrays,Clone,我有深度复制方块板的功能: public Square[][] copy_array(Square[][] board) { Square[][] nv = new Square[8][8]; for (int i = 0; i < nv.length; i++) nv[i] = Arrays.copyOf(board[i], board[i].length); return nv; } public Square[]copy_阵列(Squar

我有深度复制方块板的功能:

public Square[][] copy_array(Square[][] board) {

    Square[][] nv = new Square[8][8];
    for (int i = 0; i < nv.length; i++)
        nv[i] = Arrays.copyOf(board[i], board[i].length);

    return nv;
}
public Square[]copy_阵列(Square[]board){
Square[]nv=新Square[8][8];
对于(int i=0;i
当我使用此功能并更改
nv
时,它会更改我传入的原始
板[][]方形
。我读到
array.copyOf
返回一个克隆的数组,该数组不受对原始数组的更改的影响。但这并不是反过来的,就像上面的例子一样。源阵列中的内存引用仅指向新位置,如下所示:


进行真正的深度复制的最佳方法是什么,以便对
nv
中的对象所做的更改不会更改
board
中的对象?

尝试使用类似的方法

public Square[][] copy_array(Square[][] board) {

    Square[][] nv = new Square[8][8];
    for (int i = 0; i < nv.length; i++)
        nv[i] = board[i].clone();

    return nv;
}
public Square[]copy_阵列(Square[]board){
Square[]nv=新Square[8][8];
对于(int i=0;i

我没有测试它,但是克隆制作了一个深度拷贝

看看这里的选项:那是javascript,arathorn的儿子,我需要java!哦,今天早上我的咖啡在哪里?Lola如果您需要每个
Square
实例的副本,那么您应该在
Square
类中提供一些复制它们的方法,例如复制构造函数。@entercapa,对象可序列化吗?您可以使用JAXB或类似的工具来序列化和反序列化阵列