AS3.0中: 定义的对象名只是真正对象的一个引用。这句话的含义是什么?

varmyobj1:object=(a:123,b:456);varmyobj2:object;myobj2=myobj1;myobj2.a++;trace("myobj... var myobj1 :object=(a:123,b:456);
var myobj2 :object;
myobj2=myobj1;
myobj2.a++;
trace("myobj1.a=",myobj1.a,"myobj2.a=",myobj2.a);

输出结果是: myobj1.a=124 myobj2.a=124
为什么myobj1的值不是123呢? 跟上面的句子有什么关系? 能解释一下吗?
展开
 我来答
zb6306
2012-05-30 · TA获得超过777个赞
知道大有可为答主
回答量:2585
采纳率:66%
帮助的人:1163万
展开全部
我来回答这个问题吧,这就涉及到对象的引用问题了,什么是引用?其实在AS3.0中,一切皆引用,只是对象在内存中的存在方式不一样,决定了是值引用还是对象引用的关系,一般来说,基本数据类型比如数字,字符布尔值之类的,都是值引用,值引用的最大特点是不可变的,就是固定值,如果想变化,就得重新创建一个值,而所有相同值都是引用同一个对象.比如var a:uint=5;那么就是先在内存中创建一个5的对象,现在我们这样操作a++;那么现在计算机就又要重新创建了一个对象6用于a的引用.那么这个5如何了呢,如果这个5没有其它对象引用它的话,就符合垃圾回收机制,会自动清除掉的.这是简单数据类型的处理方式,那么复杂数据类型的处理方式就与此不同,复杂数据类型在内存中,不是固定不变的值,它是可变的,因此凡是引用这个复杂数据类型的对象,殾对这个内存中的对象具有可操作性,也就是说,如果两个对象同时指向内存中的同一个对象,那么其中如果有一个修改值,都会影响所有指向它的对象的值,以上的例子就是一个.在var myobj1中,它指向了内存中的{a:123,b :456}现在又有myobj2同样也指向了这个对象,因为是同时指向了一个对象,现在对myobj2进行操作,其实是对内存中的对象{a:123,b:456}进行了操作.自然内存中的对象的值发生了改变,现在内存中的对象值变成了{a:124,b:456}那么因为myobj1指向这个对象,自然myobj1也变成了{a:123,b:456};这是编程中很重要的基础知识,如果这方面你搞不明白,那么将来你要提高编程水平会有很大障碍.希望我的解释对你有用,这也是我的理解.祝你成功.
再补充一下:
var a:uint=5;
var b:uint=a;
b++;
trace(a);
//输出5,因为数字在内存中是常量,为固定值,所以改变b的值是不会改变a的值的.b引用了在内存中新创建的6,而5因为有a在引用,所以内存中现在存在了两个数字对象5和6.现在我们再创建一个对象
var c:uint=5;
这个时候内存中并没新增加一个对象5而是直接引用了原来的5,现在我们来测试一下
trace(a===c);//输出true;
trace(a==c);//输出true;说明内存中并没有新的对象生成.这是基本数据类型在内存中的特点.

其实对引用这个东西,够写一章了,在这里只能写这么多,要是你有不懂的地方,我们可以交流,总之这部分很重要.
更多追问追答
追问
谢谢你的回答,很感谢。
基本数据类型:
var a:int=123;
这句的意思是:
1 。先内存中创建a容器然后给a容器赋123值
2 。 a指向内存中的123
1对还是2对?
复杂数据类型:
var myobj1 :object={a:123,b:456};
这句的意思是:
1。内存中先创建对象值{a:123,b:456}后, myobj1 指向对象值
2。先创建对象myobj,然后给它赋{a:123,b:456}对象值
在这里1对还是2对?
今后还会有疑惑想向您请教,能告诉我您的联系方式吗?
追答
所有赋值都是指向,其实创建变量也是一个创建对象的过程,对象之间的联系就是一种指向的关系.说白了,就是一个对象指向另外一个对象.这就是引用.你可以查找我的联系方式加我.
匿名用户
2012-05-30
展开全部
问题就出在这句
myobj2=myobj1;
myobj2在内存中没有生成新的对象 只是产生了一个指向myobj1的指针
myobj2.a++; 与myobj1++;没啥差别 都是所指向的数据递增了而已
追问
var myobj1 :object={a:123,b:456};//在内存中创建对象 myobj1 后给它{a:123,b:456}值吗?myobj2=myobj1 //然后myobj2在内存中没有生成新的对象,只是产生了一个指向myobj1对象的指针?还是指向{a:123,b:456}对象值?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式