黑马程序员技术交流社区

标题: ++的问题 [打印本页]

作者: 曹震国    时间: 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