在java中,同C++一样,是没有直接的二维数组的,其中二维数组的实现是多个一维数组重叠而成.

 

对于普通的一维数组:

int[] arr = new int[5];

//赋值[1,2,3,4,5]

这时,我们在执行

int[] b = a.clone();

如果操作

b[1] = 12;

此时,我们输出a[1]和b[1],发现值是1,10

得出结论:

对一维数组的拷贝操作是直接拷贝其中的值.而不是拷贝引用.

 

因此,如果此时有一个二维数组:

JAVA数组的拷贝

二维数组的构建方式是在0xa0的引用空间中存入其它一维数组的引用地址.

如果我们此时直接对二维数组进行拷贝操作.相当于:

JAVA数组的拷贝

我们可以看到,此时不过是将引用拷贝了一份儿而已,因此在访问新的拷贝的数组时,仍然访问原来的值.修改的也是原来的栈空间.

 

转载于:https://my.oschina.net/qkmc/blog/1581098

相关文章: