2015-05-19 91 views
-3

例如,,是拷貝2d數組只是拷貝的參考?

private char[][]board ; 

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

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

另外,如果我修改this.board,將其反映原板?

+0

這是同一個對象,是的。 – Bubletan

+0

您的問題的標題有點誤導,因爲您的代碼中沒有複製。你只是在這裏分配一個對象引用。 – azurefrog

+0

是的,如果這就是你所要求的,它只是參考的副本,而不是實際的數據副本。 – K139

回答

1

是的,它只是複製參考,而不是數據。

爲了使它更明顯,讓我們改變你的變量名:

private char[][] firstBoard; 

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

後調用foo()功能,既firstBoardsecondBoard將指向同一個二維數組。所以,如果你再這樣做:

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

...然後「X」將被打印出來,因爲改變這種二板指向正在改變firstBoard指向同一個數組的數組。我很驚訝你沒有寫一個測試程序來測試這個。

推薦閱讀:

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

0

在你的情況下,任何陣列上的變化將被應用到另一個陣列,所以如果你想使用兩個數組你應該複製的數據一個個像保持這個:

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

      t.board[i][j]=board[i][j]; 
     } 
    } 

複製後,你可以改變另一個數組。

+0

或者你可以使用'System.arraycopy' –