2016-06-13 56 views
-1

我開始學習JAVA,並試圖理解有關數組的東西。因此,在下面的代碼中,arr1的元素已分配給arr2[1],在第二個循環中,arr2[row][col]增加了。爲什麼在這個代碼示例中數組元素髮生了變化?

我只是在用調試器瞎搞,意識到arr1的內容也隨着arr2[row][col]一起遞增。

這可能是一個虛擬的問題,但我真的無法理解它,你可以詳細說明那裏的邏輯嗎?

public static void main(String[] args){ 

    int[] arr1 = { 1, 2, 3, 4}; 
    int[][] arr2 = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; 
    arr2[1] = arr1; 
    for (int row = 0; row < arr2.length; row++) { 
     for (int col = 0; col < arr2[row].length; col++){ 
      System.out.print(arr2[row][col] + " "); 
      arr2[row][col]++; 
     } 
     System.out.println(""); 
    } 
} 
+3

相關:http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value – assylias

回答

1

ARR2 [1]是ARR1 所以參考,當你遞增ARR2一些[1],這也體現在ARR1。

Java對象變量是引用,所以arr2 [1]只是指向與arr1相同的地址。 您可以在此找到許多文章:

您的代碼,聲明數組

int[] arr1 = {1, 2, 3, 4}; 

聲明一個多維數組(數組陣列):

int[][] arr2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; 

的ARR2的第二陣列分配(即:ARR2 [1])至ARR1

arr2[1] = arr1; // {1, 2, 3, 4} 
+0

我絕對有這部分。我的問題是,爲什麼每次執行'arr2 [row] [col] ++;'時,arr1'的所有元素都會增加? –

+0

看到我的編輯,我想現在的答案就在那裏(第一行) – alexbt

1

這裏

int[] arr1 = { 1, 2, 3, 4}; 
int[][] arr2 = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; 
arr2[1] = arr1; 

要更改ARR2的第二元件爲價值arr1 所以

arr2 = { {1, 2, 3}, { 1, 2, 3, 4}, {7, 8, 9} }; 

是正確的!

而在第二個循環中,arr2 [row] [col]增加了。

是你增加的,但操作的結果是沒有得到分配到任何東西的話,這些變化都迷路......

0

要設置ARR2 [1]引用的變量arr1。所以,當你修改arr2 [1]你真的修改了arr1的值。

如果你想設置爲ARR2 [1] ARR1的值,使用:

arr2[1] = arr1.clone(); 

的方法克隆返回,而不是引用。

希望這會有所幫助。問候。

+0

呃,不完全。 'clone()'返回值的一個副本的引用。 –

相關問題