在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