使用flex Array碰到的問題(原創)

來源:互聯網
上載者:User
前日,一個朋友使用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早 於金山公司

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.