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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zsx6688 中级黑马   /  2015-8-8 15:26  /  4205 人查看  /  24 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zsx6688 于 2015-8-10 21:57 编辑

基础课中讲到++/--的功能,那么如果定义一个
int a=1;
a=a++;
System.out.println(a);
输出结果是1,为什么??
而++a结果不同

24 个回复

倒序浏览
a=++a;先算a=a+1,a=a;a值该变了. a=a++ 先算a=a ,a值没改变,后面的a+1并未进行赋值操作。
回复 使用道具 举报
Wqi 发表于 2015-8-8 15:47
a=++a;先算a=a+1,a=a;a值该变了. a=a++ 先算a=a ,a值没改变,后面的a+1并未进行赋值操作。 ...

a=a++.先计算a=a后,为什么不再计算a++了?
回复 使用道具 举报
a=a++; 先int temp=a;a++;a=temp;我记得好像是这么个顺序,是有一个中间变量的
回复 使用道具 举报
a++是先执行操作然后再+1
a=a++,是先将值赋给a然后再自加1.
++a是先+1在操作。理清楚顺序
回复 使用道具 举报
如果++再 a后,先处理完表达式,再+。如果++在a前面,是先a+1,完后再处理表达式
回复 使用道具 举报
a++是先赋值在加1,++a
回复 使用道具 举报
加号在前和在后就是他俩的返回值不同,这就涉及到了内部运算问题。a=a++是先赋值再自增,所以输出的a就是1.a=++a是先自增再赋值。所以输出就是2了。
回复 使用道具 举报
输出的时候还没有+1
回复 使用道具 举报
其实楼主已经明白,当a=a完成赋值操作后,该赋值语句就已经结束,
后置加实际上并没有参与运算,故而最终结果是输出a=1的
回复 使用道具 举报
记住吧,有个加temp的方法的,但是很麻烦,不如这样记住比较好。
回复 使用道具 举报
++ a  会变  的    要是在{a++}这样会  变
回复 使用道具 举报
先赋值再+1,+1之后并没有赋值动作
回复 使用道具 举报
涉及到了先加和后加  我刚开始也搞不懂
回复 使用道具 举报
我感觉大家没有理解lz的真正问题。。。
int a=1;
a=a++;//lz应该是认为该操作的确是a先赋值给a,结果a的值为1,然而lz认为该运算没有结束,事实上的确没有结束CPU还要执行++操作呢,可是操作的值是a?其实此时不是a的值加了1而是CPU中一种寄存器里的值加了1
所以打印时访问的a的值还是1
这里面有大量的栈内存操作,并不像我们想象的那么简单

点评

我想问的其实就是这个问题,不太明白内存和CPU里如何运行的,  发表于 2015-8-9 21:33
回复 使用道具 举报
不明觉厉
回复 使用道具 举报
a++执行完毕再进行+1运算, 所以先计算a=a,执行完a=a之后,a才++,这时没有其他的变量来接收++后的值,所以输出a的值不变
回复 使用道具 举报
a=a++ 的意思是先把a赋值给a,然后自增,a=++a,是先让a自增后,再赋值给a。
回复 使用道具 举报
必须是1啊   a++的值等于1   实际a已经等于2了
回复 使用道具 举报
zsx6688 发表于 2015-8-8 16:01
a=a++.先计算a=a后,为什么不再计算a++了?

实际上是计算的,只是在赋值运算中在栈内存中生成一个副本,先输出a=0后,虽然完成了++操作,但是这个副本在方法完成后,就消失了。

点评

多谢多谢!!  发表于 2015-8-9 21:44
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马