AS3.0中:定义的对象名只是真正对象的一个引用.这句话的含义是什么?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 my

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/08 05:20:20

AS3.0中:定义的对象名只是真正对象的一个引用.这句话的含义是什么?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 my
AS3.0中:定义的对象名只是真正对象的一个引用.这句话的含义是什么?
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呢?跟上面的句子有什么关系?

AS3.0中:定义的对象名只是真正对象的一个引用.这句话的含义是什么?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 my
我来回答这个问题吧,这就涉及到对象的引用问题了,什么是引用?其实在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;说明内存中并没有新的对象生成.这是基本数据类型在内存中的特点.
其实对引用这个东西,够写一章了,在这里只能写这么多,要是你有不懂的地方,我们可以交流,总之这部分很重要.