zoukankan      html  css  js  c++  java
  • 使用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早 于金山公司
  • 相关阅读:
    leetcode16 3-Sum
    leetcode679:24Game
    leetcode621 贪心:任务安排
    SpringMVC中的Controller默认单例
    O(n)复杂度求没有出现的数字(leetcode448)
    SpringBoot获取ApplicationContext
    Largest Number(leetcode 179)
    使用免费ip代理进行投票
    Oracle分页
    Oracle JDBC配置
  • 原文地址:https://www.cnblogs.com/xingluzhe/p/1547083.html
Copyright © 2011-2022 走看看