值类型和引用类型的理解
第一次在博客园上写自己的心得体会。自己算是个还未入门的超级菜鸟,希望能得到大家的指点。我发表的一些观点都是自己对相关知识点的理解,或许有很多错误的地方,期望好心人批评指导。感激不尽,谢谢啦。
/*****************************************/
在ActionScript3.中,数据类型主要分为基元数据类型和复杂数据类型。
在AS3.0中预定义的基元数据类型一共有:Boolean、int、Number、String、uint这五种。
相对而言,复杂数据类型包含一系列的基元数据类型。比如:Array、Date、Function、Error、RegExp、Xml、XmlList以及自己定义的类。
在AS3.0中,值类型直接存储值,基元数据类型都是指类型。引用类型存储引用,指向要操作的对象。
eg:基元数据类型
var a:int=2;
var b:int=a;
b=3
trace(a);//a=2;
trace(b);//b=3;
a的值并没有因为b的值改变而改变,我的理解是变量a和变量b在内存中属于不同的内存单元,直接把相应的值存到了属于自己的内存单元。每个变量的值不会因为其他变量的值的改变而改变。
eg:引用数据类型
var testA:Array = new Array(1, 2, 3, 4);
var testB:Array = testA;
testB[0] = 0;
trace(testA[0]);//0
testA和testB都引用了同一个对象,在内存中都指向同一个地址,所以testB改变了被引用的对象,testA也就相应的改变了。
var testA:Array = new Array(1, 2, 3, 4);
var testB:Array = testA;
testB= new Array(7,8,9,10);
trace(testA);//1,2,3,4
test重新实例化了一个Array对象,重新开辟出了一块内存单元,此时testA和testB所引用的对象不同。改变testA的值不会改变。
我的理解是引用其实是一个对象对另外一个对象的指向。在AS3.0中变量也是一个对象,对变量赋值的过程就是将变量对象指向内存中另外一个对象的地址的过程。这个过程就是引用。只是有有可变和不可变之分。基元数据类型都是不可变对象,复杂数据类型是可变对象。当内存中一个对象没有被其他对象引用的时候,就会被垃圾回收机制回收。所以在实际的程序编写当中,要把不用的对象的引用清除,等待垃圾回收机制回收。
浙公网安备 33010602011771号