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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1.                int x = 5;
  2.                 x = x + (x++) * (++x);
  3.                 System.out.println(x);
复制代码

为什么要理解成    5+5*7   而不是5*7+7?

11 个回复

正序浏览
260744042 发表于 2015-10-31 13:13
为什么第一个x是五呢?不是先算乘法吗,算完乘法时,x已经是7了啊?第一个x应该是7的啊? ...

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

评分

参与人数 1黑马币 +5 收起 理由
260744042 + 5 很给力!

查看全部评分

回复 使用道具 举报
X的值一直在变化,还有就是x++和++x的区别。
回复 使用道具 举报
1379号监听员 来自手机 中级黑马 2015-10-31 22:16:07
10#
系统执行语句是有顺序的
回复 使用道具 举报
这个是先出去玩儿再吃饭,和先吃饭再出去玩儿的问题
回复 使用道具 举报
陈威 初级黑马 2015-10-31 20:49:01
8#
第一个x=5    ,第二个先用5运算 然后自增成6,,,最后一个先自增1变成7再运算   就是5+5*7
回复 使用道具 举报
陈威 初级黑马 2015-10-31 20:47:40
7#
后++,是先使用原来的值运算,再自增,,,先++是先自增,在运算。
回复 使用道具 举报
是先运算再自增,还是自增后再运算的问题
回复 使用道具 举报
奋斗的丫丫 发表于 2015-10-31 08:57
第一个x是5;
x++,右自增是先开辟一个临时空间,把值存进去后再自增,然后把临时空间的值拿出来参与运算,
...

为什么第一个x是五呢?不是先算乘法吗,算完乘法时,x已经是7了啊?第一个x应该是7的啊?
回复 使用道具 举报
这个问题实质是看运算符的优先级  ()括起来的优先级最高 两个()就是从左到有 ++在左边就是先自增 再参与计算 在右边就是变量先参与计算 再自增
回复 使用道具 举报
楼上已经回答的很好了。 很好理解。
回复 使用道具 举报
第一个x是5;
x++,右自增是先开辟一个临时空间,把值存进去后再自增,然后把临时空间的值拿出来参与运算,
所以第一个括号的值是5,但是x的值变成6了
++x,就是加1,所以第二个括号的值是7
所以就是5+5*7
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马