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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

先猜一下下面这段代码的运行结果吧,猜对了你就可以撤了
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++这个表达式的值分开考虑
总结为:
++在前,参与运算的是自增之后的,即表达式的值也是自增之后的
++在后,参与运算的是自增之前的,即表达式的值也是自增之前的
无论++在前还是在后,++都先做了自增,只是表达式的值不同


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



4 个回复

倒序浏览
这个本来知道的能分清,把a++或++a当成整体,但以前不知道自增是先进行啊;
回复 使用道具 举报
前缀就是先计算a+1,把结果作为整个表达式的值,后缀就是先把a作为整个表达式的值
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
++在前面就先运算再赋值,在后面就先赋值再运算
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
zmanx 发表于 2017-2-13 12:42
++在前面就先运算再赋值,在后面就先赋值再运算

用这个思想做这个题理论上结果应该是11~实际结果是10
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马