2011-12-20 66 views
2

不太確定,如果我問得很對,但基本上我有一個數組,它存儲了一些var(int /數字)。而當我通過改變var數字的數組循環時,數字似乎仍然沒有改變。根據下面的代碼,你可以更好地瞭解我在說什麼。更改數組內var的數量,是否不會更改var結果本身?

private var _numArray:Array = new Array() 
    private var _no1:int 
    private var _no2:int 

    public function Main():void 
    { 
     _no1 = 10 
     _no2 = 20 
     _numArray.push(_no1) 
     _numArray.push(_no2) 

     while (_numArray.length) 
     { 
      _numArray[0] = 0 
      _numArray.splice(0, 1) 
     } 
     trace(_no1, _no2) // still returning 10 , 20 
    } 

回答

1

如果您希望數組存儲引用而不是值,則需要使用非基本數據類型。原始數據類型爲int,uint,Number,BooleanString。非原始(複雜)數據類型是其他任何東西。

// SpecialNumber.as 

public class SpecialNumber 
{ 
    public var value:Number; 

    public function SpecialNumber(value:Number) 
    { 
     this.value = value; 
    } 
} 

// Main.as 

public class Main 
{ 
    public function Main() 
    { 
     var no1:SpecialNumber = new SpecialNumber(5); 
     var no2:SpecialNumber = new SpecialNumber(10); 

     var array:Array = [no1, no2]; 

     array[0].value += 10; 
     array[1].value += 60; 

     trace(no1.value, no2.value) // Output is "15 70" 
    } 
} 
+0

正是我一直在尋找,但它確實消耗略多的內存比1。人工設定VAR 1但儘管如此,其良好的知道有在1個去改變龐大的數字的選擇。 – Hwang 2011-12-20 09:34:40

+0

它存儲對值的引用,而不是值本身。這就是爲了按照你的要求工作所必須做的,所以它不是真正使用更多的內存:) – 2011-12-20 20:25:58

4

這是基元如何工作。當你將一個像int,Number等原語推到一個數組或傳遞給一個函數時,它們是通過值傳遞的。所以_numArray[0]_no1是不同的東西。變化是一個不會影響另一個。