Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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中,2d数组的复制只是引用的复制吗?_Java - Fatal编程技术网

在java中,2d数组的复制只是引用的复制吗?

在java中,2d数组的复制只是引用的复制吗?,java,Java,比如说, private char[][]board ; public voi foo(char[][] board) { this.board = board; //so, what's happening in this line. just pass the reference? // } 另外,如果我修改这个.board,它会反映到原始board吗?是的,它只是复制引用,而不是数据 为了让它更明显,让我们更改变量名: private char

比如说,

private char[][]board ;

public voi foo(char[][] board) {

    this.board = board; //so, what's happening in this line. just pass the reference?
               // 
}

另外,如果我修改这个.board,它会反映到原始board吗?是的,它只是复制引用,而不是数据

为了让它更明显,让我们更改变量名:

private char[][] firstBoard;

public void foo(char[][] secondBoard) {
    this.firstBoard = secondBoard;
}
调用
foo()
函数后,
firstBoard
secondBoard
都将指向相同的二维数组。因此,如果你这样做:

secondBoard[0][0] = 'X';
System.out.println(firstBoard[0][0]);
…然后将打印出“X”,因为更改secondBoard指向的阵列就是更改firstBoard指向的相同阵列。我很惊讶你没有写一个小测试程序来测试这个

建议阅读:


在您的情况下,任何数组上的更改都将应用于另一个数组,因此如果您想继续使用这两个数组,您应该像这样逐个复制数据:

for (int i = 0; i < rows; i++) {
        for (int j = 0; j < columns; j++) {

            t.board[i][j]=board[i][j];
        }
    }
for(int i=0;i

复制后,您可以在更改另一个数组的同时更改数组。

这是同一个对象,是的。您的问题的标题有点误导,因为您的代码中没有复制。您只是在这里分配一个对象引用。是的,它只是引用的
副本
,而不是数据的实际
副本
,如果您是这样要求的话。或者您可以使用
System.arraycopy