数组复制:关于java中引用传递的一个例子

  首先,我们看下面两段程序:

(1).
1 int[] a = {1, 2, 3, 4};
2 int[] b = new int[4];
3 b = a;
(2).
1 int[] a = {1, 2, 3, 4};
2 int[] b = new int[4];
3 int i = 0;
4 for(int num:a){
5     b[i++] = num;
6 }
  赋值之后,数组b的值都是{1, 2, 3, 4},但是这两种方法是有实质区别的。
  首先,数组的初始化过程是这样的:对于int[] a;首先定义一个数组名a,然后将a这个变量进栈,当然这里没有对a进行初始化,所以a是一个空引用。对于int[] a = {1, 2, 3, 4};首先也是定义一个变量a并将a进栈,然后在堆区创建一个对象{1, 2, 3, 4},最后建立a对对象{1, 2, 3, 4}的引用。
  其次,值传递和引用传递,第一种方法,实际上是改变了a的引用对象,ab引用同一个对象了,这样也会产生一个不良后果,b原来引用的对象不再被引用,也就产生了一块内存垃圾。如下图所示:
  
  第二种方法,是对b引用的内存区域的赋值,并未改变b的引用对象。
  
  复制数组切勿使用引用传递的方法,不但会产生内存垃圾,不适当的操作也会改变原来的数组。
posted @ 2013-04-14 17:04  FingerDancing  阅读(232)  评论(0编辑  收藏  举报