AS3 数组的浅复制与深复制

1、如果数组中的元素全部是基元数据类型,复制没有浅复制和深复制的分别。

     当数组中元素是复杂数据类型,即引用类型时,那么复制就分为钱复制和深复制。


2、浅复制

实例

			var copy:Array=oroginal.slice();
			var copy:Array=oroginal.concat();

使用浅复制生成的数组,其个元素存放的只是引用。两个数组中相同位置的元素存放的引用指向同一个对象。那么,该对元素的操作,等于就是操作引用指向的对象。如果该对象的状态发生变化,那么也会影响到另一个数组中相应位置的元素。例如:

			array=["abc","def","haha","hua"];
			var oroginal:Array=[1,"hua",array];//array是个数组,即引用类型
			var copy:Array=oroginal.slice();
			//或var copy:Array=oroginal.concat();
			copy[2][1]="zhang";
			trace(oroginal);//1,hua,abc,zhang,haha,hua
			trace(copy);//1,hua,abc,zhang,haha,hua

可以看出,copy的改变会影响oroginal,这就是钱复制。


3、深复制 ByteArray

深复制生成的新数组,其所有元素都是真正的原数组元素的备份。

这时两个数组中相同位置的元素,存放着不同的引用,指向不同的对象。

深复制用到ByteArray类

			array=["abc","def","haha","hua"];
			var oroginal:Array=[1,"hua",array];
			var foo:ByteArray=new ByteArray();
			foo.writeObject(oroginal);
			foo.position=0;
			
			var copy:Array=foo.readObject() as Array;
			copy[2][1]="zhang";
			trace(oroginal);//1,hua,abc,def,haha,hua
			trace(copy);//1,hua,abc,zhang,haha,hua

可以看出,copy的改变不会影响oroginal,确确实实是真正的复制。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值