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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

基础课讲的是 int x=4; int y=(x++)+(++x)+(x*10);然后 结果是x=6 y=70 明白了

可是  自己又试了一下 int x=4;  int y=(x++)+((++x)+(x*10));运行结果依旧是x=6 y=70
如果括号里面优先级高,先算括号里面的话  算到x*10的时候不应该是5*10吗?

为了突出括号效果  改一下算式
int x=4;  int y=(x++)*((++x)+(x*10));  结果是x=6 y=264   JAVA先算的第一个x++,之后才算括号里面的,按照4*(6+60)算的
可是 按照运算符的优先级 ()的优先级是高于++的,为什么不先算括号里的?

int x=4;  int y=(x++)*(++x)+(x*10);    结果是x=6 y=84  JAVA按4*6+60算的 谁都能理解

感觉++ 这个运算设计出来就是为了循环那里计数用的,其他地方就像一个BUG 一样,就不应该参与到其他运算中去,弄得人头昏脑涨,根本就应该规范杜绝乱使用,而不是当做什么考点......好像就中国才这么干,外国编程学习注重功能性程序段的标准化,学的是一段一段的标准程序,然后互相拼接组成整体

难道把++运算弄得多熟悉 会对JAVA整体编程有多大帮助吗?

4 个回复

倒序浏览
张宪达 来自手机 中级黑马 2016-4-16 13:03:29
沙发
只要懂了运算符的作用,后面的知识不会用到太复杂的东西,没有实际应用
回复 使用道具 举报
按照我的理解:
int x=4;  int y=(x++)+(++x)+(x*10);运行结果是x=6 y=70  
int x=4;  int y=(x++)+((++x)+(x*10));运行结果是x=6 y=70
(x++) 的 (   ) 跟 ((++x)+(x*10)) 中的 (         ) 的优先级是一样的,你能理解int y=(x++)+(++x)=4+6,那你把第二项(++x)中的 ++x 替换成 (++x)+(x*10),然后再理解一下。
个人见解。

回复 使用道具 举报 1 0
楼上说的对,()的优先级是一样的, int y=(x++)+((++x)+(x*10))这个表达式里先算(x++),再算((++x)+(x*10));
二((++x)+(x*10))里面呢,是先算(x++),再算(x*10),再算两个之和。
回复 使用道具 举报
本帖最后由 nastasya 于 2016-4-16 15:02 编辑

感谢上面朋友的 解答,既然说到括号了
那 下面这个 式子
int x=5;  int y=x+++2*(++x);   JAVA计算结果是x=7  y=19  貌似按照5+2*7算出来的
可是如果按照先算括号的话  不是应该按照 6+2*6=18算吗?  
还是只要是x++,JAVA都是给先弄成(x++)然后计算??
按理说  自加自减 出到y=x+++2*(++x);这种变态式子 应该就算到头了吧
所以说 程序特别是计算表达式 写的不规范  是应该极力避免的  而不应该把这些书写很不规范的表达式作为考点来炫耀,还有比y=x+++2这样变态的式子吗????y=x+++x+++2
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马