当你放置
时,有人会用内存图解释会发生什么 int[] data = {1, 3, 5, 7, 9};
int[] copy = data;
在您的计划中?
它是否只是创建一个与前一个相同长度的数组?我知道他们没有相同的价值观,但就是这样。
是否会在其第一个索引中复制接收数据的地址?
答案 0 :(得分:4)
这根本不是副本。
您的两个变量data
和copy
将指向同一个数组。
如果您想要副本,可以
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
现在指向数据指向的相同数组。