黑马程序员技术交流社区

标题: 关于a++和++a的一个有意思的小问题 [打印本页]

作者: Jet'aime    时间: 2017-2-10 20:09
标题: 关于a++和++a的一个有意思的小问题
先猜一下下面这段代码的运行结果吧,猜对了你就可以撤了
int a = 10;
a = a++;
System.out.println(a);

----------------------------------华丽的分割线----------------------------------------
附上运行结果:
10
-----------------------------------------------------------------------------------------
平时我们理解的++a表示a先自加再参与运算,a++表示先参与运算再自加,在这种情况下是不太准确的
事实上,不管是a++还是++a,a都是先自加再参与运算的,比方说,可以把a++想象成一个整体,即将它当做一个式子,当执行到a++时,a的值先自加1,此时a的值为11,但是a++这个表达式的值为自加前的值,为10,将10赋给a,a的值又被修改为10,所以运行结果为10
因此应该将a的值和a++这个表达式的值分开考虑
总结为:
++在前,参与运算的是自增之后的,即表达式的值也是自增之后的
++在后,参与运算的是自增之前的,即表达式的值也是自增之前的
无论++在前还是在后,++都先做了自增,只是表达式的值不同


同时在此感谢王恩泽老师的指导~




作者: monian    时间: 2017-2-12 22:55
这个本来知道的能分清,把a++或++a当成整体,但以前不知道自增是先进行啊;
作者: cy666    时间: 2017-2-13 12:36
前缀就是先计算a+1,把结果作为整个表达式的值,后缀就是先把a作为整个表达式的值

作者: zmanx    时间: 2017-2-13 12:42
++在前面就先运算再赋值,在后面就先赋值再运算

作者: Jet'aime    时间: 2017-2-13 17:03
zmanx 发表于 2017-2-13 12:42
++在前面就先运算再赋值,在后面就先赋值再运算

用这个思想做这个题理论上结果应该是11~实际结果是10




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