使用前缀增量运算符和括号优先级对数学表达式进行澄清

Har*_*ani 0 java math operator-precedence associativity

鉴于此代码:

int p,k=8;
p=k*(++k-8);
System.out.println(p);
Run Code Online (Sandbox Code Playgroud)

何时++k被评估k=9然后变得k*(9-8)给予9*1

int p,k=8;
p=(++k-8)*k;
System.out.println(p);
Run Code Online (Sandbox Code Playgroud)

但这给出了9作为输出

Tag*_*gas 5

你有一个乘法

left side:  k  
right side: (++k-8)
Run Code Online (Sandbox Code Playgroud)

正如您所说,大括号具有优先权.但是,您的程序仍然"从左到右"运行.所以首先评估左侧,即k = 8.之后评估右侧,即(++k-8) = 1.现在我们确定了双方并将它们相乘:8*1 = 8.