private char[][]board ;
public voi foo(char[][] board) {
this.board = board; //so, what's happening in this line. just pass the reference?
//
}
另外,如果我修改this.board,將其反映原板?
private char[][]board ;
public voi foo(char[][] board) {
this.board = board; //so, what's happening in this line. just pass the reference?
//
}
另外,如果我修改this.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」將被打印出來,因爲改變這種二板指向正在改變firstBoard指向同一個數組的數組。我很驚訝你沒有寫一個測試程序來測試這個。
推薦閱讀:
在你的情況下,任何陣列上的變化將被應用到另一個陣列,所以如果你想使用兩個數組你應該複製的數據一個個像保持這個:
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
t.board[i][j]=board[i][j];
}
}
複製後,你可以改變另一個數組。
或者你可以使用'System.arraycopy' –
這是同一個對象,是的。 – Bubletan
您的問題的標題有點誤導,因爲您的代碼中沒有複製。你只是在這裏分配一個對象引用。 – azurefrog
是的,如果這就是你所要求的,它只是參考的副本,而不是實際的數據副本。 – K139