黑马程序员技术交流社区

标题: 关于a++和++a的问题 [打印本页]

作者: 悲伤丿心    时间: 2015-7-26 15:02
标题: 关于a++和++a的问题
程序一:
int a=10;
a=a++;
System.out.println(a);
程序二:
int a=10;                       
System.out.println(a++);
System.out.println(a);

程序一的结果是输出 10
程序二的结果是输出 10 和 11

为什么程序一不是11?
a=a++;这行代码执行完之后,a不是已经自增了吗
和程序二相比较,  求解

作者: 耀阳圣尊    时间: 2015-7-26 15:41
a=a++;这行代码执行完之后。首先是先给a赋值为10.但是还没有自增。但是在内存中已经出现了。你可以写个循环就能看见值了。
作者: xclyijin    时间: 2015-7-26 15:48
a++是先赋值后运算。。。。。
作者: 黄新宇    时间: 2015-7-26 16:20
我也不道
作者: 水佳伟    时间: 2015-7-26 21:44
一中结束时有个a=10的底层操作,可以理解为a=10和a=a+1,最后a的值看左边
作者: 悲伤丿心    时间: 2015-7-26 21:59
xclyijin 发表于 2015-7-26 15:48
a++是先赋值后运算。。。。。

我知道是先赋值后运算,所以在a=a++的下一行,a不是已经执行a++了吗?
作者: 悲伤丿心    时间: 2015-7-26 22:01
水佳伟 发表于 2015-7-26 21:44
一中结束时有个a=10的底层操作,可以理解为a=10和a=a+1,最后a的值看左边

我知道是先赋值后运算,所以在a=a++的下一行,a不是已经执行a++了吗?
作者: 水佳伟    时间: 2015-7-26 22:03
悲伤丿心 发表于 2015-7-26 22:01
我知道是先赋值后运算,所以在a=a++的下一行,a不是已经执行a++了吗?

先执行a++,a就等于11了,然后等于号左边有个a=10的赋值操作,输出的是左边的a的值
作者: 悲伤丿心    时间: 2015-7-26 22:07
水佳伟 发表于 2015-7-26 22:03
先执行a++,a就等于11了,然后等于号左边有个a=10的赋值操作,输出的是左边的a的值 ...

左边的a   右边的a  不是同一个吗
作者: lishang    时间: 2015-7-26 22:20
其实就是上边说的,设计到一个底层操作,记住就好,你也可以这样理解,那就是把a=a++看作两个a,右边的a确实是++了,而打印输出的则是等号左边的那个被先赋值为10的a,这个只是方便记忆的方法
作者: 悲伤丿心    时间: 2015-7-26 23:18
3174918418 发表于 2015-7-26 22:13
程序一:
int a=10;
a=a++;

a++;这个操作,是不是在这句代码 的下一句,就执行了a的自增,是吧?  那位什么下一句 会是10呢
作者: VCxiaopeng    时间: 2015-7-27 09:51
好难,上课被绕晕了:dizzy:




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2