使用flex Array碰到的问题(原创)

前日,一个朋友使用flex Arra时碰到了一个问题,百思不得其解。问题是大概是这样的:
  var arr1:Array = new Array();
  var arr2:Array = new Array();
  for(var i:int = 0; i < n; i++)//for 循环
  {
    arr1 = getArray(i);//返回一个array
    arr2[i] = arr1;//(*)
  }
  trace(arr2);//输出结果每行都是最后一个arr1
  其实这个问题主要是这位朋友习惯使用C++而造成的。在C++中,我们d定义了一个变量,改变它某一时刻的值,并不会影响到他以前保存的值。但在flex中不一样。flex对于除基础类型(int,Boolean之类的)之外,都是按引用操作。所以(*)这个步骤,其实每次都是往arr2中放入arr1的一个内存地址的拷贝(暂时先这么说吧,我也不知道flex内部的机制是否这样,大概是这个意思)。因此,arr2的每一行指向的其实都是同一个内存,当循环结束后,当然arr2中的内容都同最后一个arr1一样。
  了解了这个缘由,那么便很容易解决了。
   var arr1:Array;
  var arr2:Array = new Array();
  for(var i:int = 0; i < n; i++)//for 循环
  {
    arr1 = new Array();//每次new一个arr1
    arr1 = getArray(i);//返回一个array
    arr2[i] = arr1;//(*)
  }
                                  David Cai 09-08-16早 于金山公司
posted @ 2009-08-16 10:53  行路者  阅读(369)  评论(0编辑  收藏  举报