黑马程序员技术交流社区

标题: 兄弟们能说说对自增的理解吗? [打印本页]

作者: 260744042    时间: 2015-10-30 18:51
标题: 兄弟们能说说对自增的理解吗?
  1.                int x = 5;
  2.                 x = x + (x++) * (++x);
  3.                 System.out.println(x);
复制代码

为什么要理解成    5+5*7   而不是5*7+7?
作者: 奋斗的丫丫    时间: 2015-10-31 08:57
第一个x是5;
x++,右自增是先开辟一个临时空间,把值存进去后再自增,然后把临时空间的值拿出来参与运算,
所以第一个括号的值是5,但是x的值变成6了
++x,就是加1,所以第二个括号的值是7
所以就是5+5*7
作者: WosLovesLife    时间: 2015-10-31 10:17
楼上已经回答的很好了。 很好理解。
作者: rickyli    时间: 2015-10-31 11:14
这个问题实质是看运算符的优先级  ()括起来的优先级最高 两个()就是从左到有 ++在左边就是先自增 再参与计算 在右边就是变量先参与计算 再自增
作者: 260744042    时间: 2015-10-31 13:13
奋斗的丫丫 发表于 2015-10-31 08:57
第一个x是5;
x++,右自增是先开辟一个临时空间,把值存进去后再自增,然后把临时空间的值拿出来参与运算,
...

为什么第一个x是五呢?不是先算乘法吗,算完乘法时,x已经是7了啊?第一个x应该是7的啊?
作者: xiexie758    时间: 2015-10-31 17:51
是先运算再自增,还是自增后再运算的问题
作者: 陈威    时间: 2015-10-31 20:47
后++,是先使用原来的值运算,再自增,,,先++是先自增,在运算。
作者: 陈威    时间: 2015-10-31 20:49
第一个x=5    ,第二个先用5运算 然后自增成6,,,最后一个先自增1变成7再运算   就是5+5*7
作者: 米老鼠    时间: 2015-10-31 21:59
这个是先出去玩儿再吃饭,和先吃饭再出去玩儿的问题
作者: 1379号监听员    时间: 2015-10-31 22:16
系统执行语句是有顺序的
作者: xiaozhou001    时间: 2015-10-31 22:32
X的值一直在变化,还有就是x++和++x的区别。
作者: 黑夜中那颗星    时间: 2015-11-1 01:16
260744042 发表于 2015-10-31 13:13
为什么第一个x是五呢?不是先算乘法吗,算完乘法时,x已经是7了啊?第一个x应该是7的啊? ...

他是先把值拿到运算区,然后才做运算的
第一个是x,也就是5
x++ 这里是先把x的值拿到运算区,然后再自增 ,这里在运算区还是5,但是x的值已经是6了
++x  这里是把x自增后的值拿到运算区中,6+1就是7,所以在运算区中这里是7




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