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

时间:2015-05-19 17:59:46

标签: java

例如,

private char[][]board ;

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

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

另外,如果我修改此.board,它会反映到原始主板吗?

2 个答案:

答案 0 :(得分:1)

是的,它只是复制引用,而不是数据。

为了更明显,让我们更改您的变量名称:

private char[][] firstBoard;

public void foo(char[][] secondBoard) {
    this.firstBoard = secondBoard;
}

调用foo()函数后,firstBoardsecondBoard都将指向同一个2D数组。所以,如果你这样做:

secondBoard[0][0] = 'X';
System.out.println(firstBoard[0][0]);

......然后' X'将打印出来,因为更改secondBoard指向的数组正在更改firstBoard指向的相同数组。我很惊讶你没有写一个小测试程序来测试它。

推荐阅读:

Cup Size -- a story about variablesPass-by-Value Please

答案 1 :(得分:0)

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

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

            t.board[i][j]=board[i][j];
        }
    }
复制后,您可以通过更改另一个来更改数组。