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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

海狮 中级黑马 2015-11-13 22:03:58
21#
Phy_zhang 发表于 2015-11-13 17:46
看了最新的帖子,触感而发,其实a=a++可以拆分为 tmp=a ; a=a+1 ; a = tmp 其实就是什么都没发生过!!! 所以a ...

这个正解
a=a++
后面的a先赋值给一个临时常量,
然后自增
然后把临时常量赋值给a
回复 使用道具 举报
怀瑾 中级黑马 2015-11-13 22:05:00
22#
wwwgaoxi 发表于 2015-11-12 23:13
这是个强大的问题,正在思考中~~

大神请指点
回复 使用道具 举报
怀瑾 发表于 2015-11-13 21:49
不是这样的,打印的结果是1

谢谢提醒,是赋值再自增,确实是1
回复 使用道具 举报
沈会来 发表于 2015-11-13 21:29
你的题意结果a=1,已经验证,但是,如果你是b=a++的话,结果就不一样了,结果b=1,a=2其中的关键你要思考, ...

大神求指教   确实  如果改为 b=a++   则a=2,这样证明在b被赋值后 a自加了    同理   a=a++  为什么就不能先赋值后自加?  a=a++ 底层到底怎么运行的啊?  改为 a=++a; 这样还是好理解,先加在赋值给本身  
回复 使用道具 举报
打印a=1把
回复 使用道具 举报
打印结果居然是1,一直以为是2
回复 使用道具 举报
a++相当于两条语句:a=a;a=a+1;所以结果是1;
回复 使用道具 举报
哪位大神知道
回复 使用道具 举报
哈哈昨天也有人问这个
回复 使用道具 举报
+icer+ 中级黑马 2015-11-14 10:51:49
30#
你可以看成 a = 1;b = a++; a = b;这样就好理解了
回复 使用道具 举报
这是底部的隐形转换啊,因为在底部计算机是从右往左算的啊,
回复 使用道具 举报
为什么我觉得都是大神{:2_33:}
回复 使用道具 举报
结果是1
a = a ++
这里是a 先把 1赋值给了a  然后才++ 的
回复 使用道具 举报
syb012 中级黑马 2015-11-14 20:48:49
34#
因为a++中a在自增之前会先把原来的值放入一个临时变量里,然后a自增,然后用那个临时变量参与运算。

看起来就像a后增一样。一般情况下的效果的确是a后赠。

但事实是a先增,然后用自增前的那个存在临时变量的数值参与运算。

那么
int a=1;
a=a++;
这两句话可以拆解成下面的语句:
int a=1;

int temp=a;  //这中间两句其实就是a++的过程
a=a+1;

a=temp;  //从这到上三句其实就是 a=a++;的过程
回复 使用道具 举报
a++ 表达式结果为1   a为2   最后a++表达式的值又赋值给a  所以a的值最后为1   你可以单独打印啊  打印个a++  然后打印个a  就知道了
回复 使用道具 举报
只是给a做了重新赋值
回复 使用道具 举报
我觉得,学到后面没人会这样写代码了,太无聊
回复 使用道具 举报
其实可以这么记,++在变量前面就先自增然后再赋值,如果++在变量后面就先赋值,再自增。
回复 使用道具 举报
前++是先++在运算,后++是先运算后++;所以a=a++;就把a给了a没变。
回复 使用道具 举报
dsap 中级黑马 2015-11-15 12:19:05
40#
从右往左运行是怎么运行的?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马