2015-04-06 74 views
-2

會有人解釋發生了什麼,有記憶圖,當你把int [] copy = data; //當數據是數組時會發生什麼?

int[] data = {1, 3, 5, 7, 9}; 
    int[] copy = data; 

在你的程序?

它是否只是創建一個與前一個長度相同的數組?我知道他們不會有相同的價值觀,但這就是全部。

將接收數據的地址複製到第一個索引中嗎?

+0

我不明白我爲什麼得到反對票,這是一個嚴重的問題... – ShadoWolf150

回答

2

不發生數據複製,您只需將對數組的引用分配給新變量即可。

---------- 
| int[5] | <--- data 
| 1 |  points at the memory address of your array object 
| 3 | 
| 5 | 
| 7 | 
| 9 | 
---------- 

當你說:

int[] copy = data 

正在發生的事情是這樣的:

  ---------- 
copy --> | int[5] | <--- data 
     | 1 |  points at the memory address of your array object 
     | 3 |  "copy" also points at the same memory location 
     | 5 | 
     | 7 | 
     | 9 | 
     ---------- 
+0

謝謝瑞安!這正是我需要的。我知道它不會製作新的副本,但我不明白到底發生了什麼。 – ShadoWolf150

4

這不是製作一份拷貝的。

你的兩個變量datacopy將指向相同的數組。

如果你想要一個副本,你可以做

int[] copy = Arrays.copyOf(data, data.length); 
0

嘗試輸出該代碼。

System.out.println(data instanceof Object); 

你會看到輸出:

true 

這是因爲int[]Object子類。簡單地說,copy現在指向數據指向的同一個數組。

+0

這很有趣也很有幫助!謝謝。你還可以申請這個嗎? – ShadoWolf150

相關問題