AS3.0学习笔记--值类型和引用类型的区别
来源:互联网 发布:京东股票数据 编辑:程序博客网 时间:2024/05/21 11:35
AS3.0中基本值类型有这几种:Boolean,int,Number,String,uint。其余的数据类型都是引用类型。
除此之外还有一个很典型的特征:值类型的数据不用new关键字来创建,必须用new关键字创建的一定不是值类型。
那么值类型和引用类型到底有什么区别呢?
看例子:
//值类型的例子
//声明变量a,赋值为3
var a:int = 3;
//声明变量b,并将a的值赋给b
var b:int = a;
b = 9;
trace("a现在的值是:"+a);
trace("b现在的值是:"+b);
//输出结果
//a现在的值是:3
//b现在的值是:9
现在可以发现,把a的值赋给b,然后我们改变了b的值,但是a的值却没有因为b的改变而改变。首先说明a很牛逼!
其次可以得出值类型的特点:直接存值,每个变量的值不因为其他变量的值的改变而改变。(值类型的数据做数据做的很有原则,比很多人要强)
下面再来看引用类型的例子,以Array为例:
//引用类型的例子
//声明变量a,新建一个数组赋值给它
var a:Array = new Array(1,2,3);
//声明变量b,把变量a引用赋值给b
var b:Array = a;
//改变b数组的第一个元素为4
b[0] = 4;
trace("a现在的值是:"+a);
trace("b现在的值是:"+b);
//输出结果
//a现在的值是:4,2,3
//b现在的值是:4,2,3
同样是把a的值赋给了b,引用类型的数据b的值改变之后,a的值也随之改变(没原则,鄙视)。
现在来看看这2种数据类型的区别在哪里。
引用类型数据存储的是引用。对象都是通过引用来操纵的,当我们操纵一个引用数据类型时,并没有操纵直接数据,而是在和这个数据的遥控器在打交道, 当”var b:Aarry = a;“这一句执行时,实际上创建了一个新的数组变量b,然后将a持有的引用(而不是值)赋值给了b。因此时间上a和b都是同时指向同一个数组对象。那么任 何一个变量做了改变,另外一个也要受影响。
来看看实际发生的事。
在本例中,第一行代码告诉Flash Player 在内存中创建一个数组[1,2,3].然后设置a持有遥控器指向这个数组,用正式的话就是把这个数组的引用赋值给变量a。第二行代码,当我们把a的值赋给 b时,其实并没有在内存中再创建一个新的数组[1,2,3],而是直接把a的引用又给了b。因此a和b的引用完全一样都是指向原来的数组[1,2,3]。 所以,当我们通过b变量改变数组时,也就是在改变了那个唯一的数组,值也就当然变了。
在来看第三种情况
var a:Array = new Array(1,2,3);
var b:Array = a;
b = new Array(4,5,6);
b[0] = 100;
trace("a现在的值是:"+a);
trace("b现在的值是:"+b);
//输出结果
//a现在的值是:1,2,3
//b现在的值是:100,5,6
- AS3.0学习笔记--值类型和引用类型的区别
- AS3 值类型和引用类型的区别
- c#学习笔记:C#值类型和引用类型区别
- 值类型和引用类型的学习笔记
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别 .
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 正易卦圖의 五行克成
- 在windows上安装common lisp开发环境
- 黑马程序员_面向对象
- 变量存储类型
- ubuntu下安装环境 opencv&opencl
- AS3.0学习笔记--值类型和引用类型的区别
- poj 3675 Telescope(三角剖分求多边形和圆交面积)
- 对CSDN高校俱乐部的建议
- C 语言(C99) 对 64 位整数类型的支持(云风的blog)
- Linux strace命令
- javascript 动态参数简单demo
- 在论坛中出现的各种疑难问题:性能优化
- 一个人的创业时代
- oracle proc配置