黑马程序员技术交流社区
标题:
++的问题
[打印本页]
作者:
曹震国
时间:
2014-12-15 23:33
标题:
++的问题
class Demo
{
public static void main(String[] args)
{
int b = 9;
b = (b++) +3;
System.out.println(b);
}
}
打印的b的值为什么是12,
我的理解是先运算b++然后+3.再把结果赋值给b.应该是13.可我的理解是错的。为什么?错在哪,请大神指教。
作者:
caobin
时间:
2014-12-15 23:45
因为自增运算符++的优先级原本就大于+加法运算符,所以在这里括号并不会起到什么效果。
作者:
it667135
时间:
2014-12-15 23:46
他是先用b和3相加以后b在自增
作者:
x277402301t
时间:
2014-12-15 23:50
b++在后面b+3后才运算!
作者:
极光_CDY
时间:
2014-12-15 23:52
如果没有括号,结果是正确的13.问题出现在++与()的问题上。
作者:
Zomu_文林
时间:
2014-12-15 23:57
因为b++的++在后面,所以它是先操作b这个数,就是b+3即9+3=12,运算完然后b再自增,自增完后b=4,最后再把12赋给b,所以最后输出的b为12。
作者:
极光_CDY
时间:
2014-12-16 00:11
如果没有括号,结果是正确的13.问题出现在++与()的问题上。该问题可以简化为
b=(b++);
对也括号来说,内部运算优先级高,故执行b++,算术运算符放在右边,则b++的值在以没有增加的值得到的结果参与括号的整个运算,得到括号运算结果为未增加的b。此时运算括号与其他的算术运算符运算结果,并赋值给左边的b。 关键在于这里,b在括号运算结束后,执行了+1运算,此时b为10!但传递出来的参与运算的值未增加的9.运算的结果又重新覆盖了原来的b。 b的值9 变为 10 又被12覆盖
***总结一下:括号内运算完,执行b自增1;但括号的返回值确实之前的b运算的值。 **** 同理****若b=1;b=(b+++2)+2=5而不是6!那么请问b=1;b=(++b*2)*(b++*2)+2;
第一次回帖,有点乱,希望不影响你的好心情。
作者:
极光_CDY
时间:
2014-12-16 00:18
极光_CDY 发表于 2014-12-16 00:11
如果没有括号,结果是正确的13.问题出现在++与()的问题上。该问题可以简化为
b=(b++);
对也括号来 ...
b=(++b*2)*(b++*2)+2 ;输入法不好,请复制这个。谢谢
作者:
Lscreat
时间:
2014-12-16 00:26
先运算+法,得到值为12,那时候i才++,结果当然是12啦。
作者:
quick3g
时间:
2014-12-16 00:41
b++先使用再加1, 可以写成这样:System.out.println(((b++) +3));就好理解了。
作者:
quick3g
时间:
2014-12-16 00:52
本帖最后由 quick3g 于 2014-12-16 01:20 编辑
只要理解 后加还是先加就容易分析了。类似的++,--,问题还有很多。多练一下。
作者:
shuken1990
时间:
2014-12-16 15:21
b++结果是9,但是b接下来会变成10,运算的时候是9+3
作者:
Honelyboy
时间:
2014-12-16 21:46
b++是运算完载自增,int b=9; b=(b++)+3;是9+3赋值给b后,对之前的b=9自增,所以最后打印的结果是12.
作者:
新鲜感
时间:
2014-12-16 22:59
难题一个啊
作者:
飞跃离开
时间:
2014-12-16 23:10
b++是先运算再自加,而且++的运算优先级是高于+的。加不加括号对于b++的优先级来说没影响,只是为了保证阅读性的
作者:
曹震国
时间:
2014-12-16 23:23
有点理解了,谢谢大家的无私指导。
作者:
木乃伊
时间:
2014-12-17 00:31
先计算再自加:sleepy:
作者:
魏文杰
时间:
2014-12-17 00:31
后++中你可以吧(b++)整体的值看作是9,而b'的值是10.。整体(b++)的值9+2=11
作者:
dwy_hm
时间:
2014-12-17 10:26
先自增后自增的问题
作者:
双鱼座程序员
时间:
2014-12-17 10:42
大家回复都很正解,学习了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2