2011-12-20 96 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是不同的东西。变化是一个不会影响另一个。