一尘不染

带替换的后增量

java

我已经在这里有一个问题了,但我想将其扩展为示例

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;

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

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

回答351,但回答为353


阅读 163

收藏
2020-12-03

共1个答案

一尘不染

不要将
评估顺序


优先

顺序

混淆。

评估顺序指出 操作数 始终 从左到右 执行。

优先级指出*/ 运算符+和之前应用-,除非被括号覆盖。

因此,您的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 的值。

2020-12-03