int [] copy = data; //当数据是数组时会发生什么?

时间:2015-04-06 19:58:38

标签: java arrays declaration

当你放置

时,有人会用内存图解释会发生什么
    int[] data  = {1, 3, 5, 7, 9};
    int[] copy = data;

在您的计划中?

它是否只是创建一个与前一个相同长度的数组?我知道他们没有相同的价值观,但就是这样。

是否会在其第一个索引中复制接收数据的地址?

3 个答案:

答案 0 :(得分:4)

这根本不是副本。

您的两个变量datacopy将指向同一个数组。

如果您想要副本,可以

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

答案 1 :(得分: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    |
         ----------

答案 2 :(得分:0)

尝试输出此代码。

System.out.println(data instanceof Object);

你会看到输出:

true

这是因为int[]Object的子类。简单来说,copy现在指向数据指向的相同数组。