带替换的后增量

时间:2018-07-14 08:58:50

标签: java

我已经在这里提出了一个问题,但我想扩展一下Post increment with example

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)

答案351,但答案是353

2 个答案:

答案 0 :(得分:3)

不要将evaluation orderprecedence混淆。

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

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

因此,您说对a++/b+--a*b++的意思是(a++ / b) + (--a * b++)。那是优先

由于使用了数字运算符promote values to 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 的值。

答案 1 :(得分:-1)

第4步:(68/6 + 68 * 5)这是您的错! b在计算中的所有位置均为5,而不是其值6。

所以我们有:

第4步:(68/5 + 68 * 5)=(13 + 340)= 353