首页 > 解决方案 > 后增量替换

问题描述

我已经有一个自己的问题,但我想通过示例扩展它发布增量

char a = 'D';
int b = 5;
System.out.println(a++/b+--a*b++);

问题的答案之一是:

(68 / 5) + (68 * 5)而 b++ 对此没有影响。

我的疑问是如果 b++ 没有效果,那么为什么 a++ 有效果?理想情况下应该是

步骤1:(68/b+--a*b++);

现在 a = 69;

第2步:(68/b+--a*5)

现在 a = 69; b =6;

第 3 步:(68/b+68*5)

第4步:(68/6+68*5)

回答 which 351 但预期的答案是 353

标签: java

解决方案


不要将评估顺序优先级混淆。

评估顺序表明操作数总是从左到右执行。

优先级表明*and/ 运算符+在and之前应用-,除非被括号覆盖。

所以,你是对的,这a++/b+--a*b++意味着(a++ / b) + (--a * b++)。那是优先级

由于数字运算符将值提升为int(在这种情况下),你也是对的,char a = 'D'它等同于int a = 68.

所以:

(a++ / b) + (--a * b++)    a = 68   b = 5
(68  / b) + (--a * b++)    a = 69   b = 5
(68  / 5) + (--a * b++)    a = 69   b = 5
(68  / 5) + (68  * b++)    a = 68   b = 5
(68  / 5) + (68  * 5  )    a = 68   b = 6
13        + 340            a = 68   b = 6
353                        a = 68   b = 6

如您所见,b++确实有一个效果:对执行表达式b 后的值。


推荐阅读