这里并没有new 一个数组, 所以不会在堆内存中产生新的空间.
只是把arr 的值, 也就是地址值001 赋值给了 arr2, 也就是把数组arr 的地址值赋值给了 arr2.
下面通过第2个数组arr2 去修改了索引0,1,2 处的元素值.
分析内存图
第1行代码执行完成之后的内存图情况.
详见62.单个数组内存图.
这3行代码把元素值进行修改.
修改完毕之后, 输出值.
int[] arr2 = arr; 的执行流程
首先arr2 先进入栈内存.
接着把arr 的值赋值给arr 2.
赋完值之后, arr2 的值就是001了.
这行代码执行完成之后, 就实现了多个数组的指向相同.
接下来通过 arr2 的012索引去修改元素值, 因为arr2 也指向001 这块内存空间.
所以arr2 修改的就是这块内存空间的数值.
修改完成
输出值.
总结: 当两个数组指向相同的时候, 任何一个数组修改了堆内存里的数据, 另一个数组去访问的时候, 访问到的元素值也是发生改变的.
代码演练
控制台输出