A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 箫庐   /  2011-12-2 18:01  /  4100 人查看  /  22 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

赋值语句,是将一个对象的引用赋给另一个对象:(a=a++)为了区别,在这里我们将左边a写成a1,右边a++的结果写成a2,在执行(a=a++)时,首先是将a的引用赋给了a1,即a1指向的是a=3这快内存;然后再执行自增,自增后a=4,在内存中开辟了一块新的内存区域来贮存它,此时指向该区域的就是a2。
第一个程序  : a1就代表a,a2就代表自增后的a, 但自增后的a并没用任何变量指向它,我们就早不到它了。
第二个程序  : a1就代表b,a2就代表自增后的a,a就是a2。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
箫庐 黑马帝 2011-12-5 13:38:20
22#
周敏2011nc 发表于 2011-12-5 08:48
赋值语句,是将一个对象的引用赋给另一个对象:(a=a++)为了区别,在这里我们将左边a写成a1,右边a++的结 ...

这样说,明白了.
也就是开辟了两块内存;
第一步,将a赋给a本身,没变化;
第二步,计算a++时另外开辟一块内存         但是没有被引用;
所以打印的时候只能打印被引用的那个内存的内容,也就是没有变化的值.

谢谢!

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
李明 黑马帝 2011-12-6 12:59:34
23#
段波 发表于 2011-12-4 09:00
这是一个算符优先级的问题!a=a++;内部计算是:temp=a;a+=1;a=temp; 也就是说a=4的值被a=3的值覆盖了,所以 ...

我觉得你的说法有道理,比较直观的说明这个问题
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马