我已经在这里有一个问题了,但我想将其扩展为示例
char a = 'D'; int b = 5; System.out.println(a++/b+--a*b++);
作为该问题的答案之一是:
(68 / 5) + (68 * 5) 和b ++对此没有影响。
(68 / 5) + (68 * 5)
我的疑问是,如果b 不起作用,那么为什么a 起作用?理想情况下应该
第1步: (68/b+--a*b++);
(68/b+--a*b++);
现在a = 69;
第2步: (68/b+--a*5)
(68/b+--a*5)
现在a = 69; b = 6;
第三步: (68/b+68*5)
(68/b+68*5)
第4步: (68/6+68*5)
(68/6+68*5)
回答351,但回答为353
不要将 评估顺序 与 优先 顺序 混淆。
评估顺序指出 操作数 始终 从左到右 执行。
优先级指出*和/ 运算符 在+和之前应用-,除非被括号覆盖。
*
/
+
-
因此,您的a++/b+--a*b++意思是(a++ / b) + (--a * b++)。那是 优先 。
a++/b+--a*b++
(a++ / b) + (--a * b++)
由于数字运算符会将值提升为int(在这种情况下),因此您也可以认为char a = 'D'与等效int a = 68。
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 后 的值。
b++
b