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

Clarification on math expression using prefix increment operator and bracket precedence

鉴于此代码:

int p,k=8;
p=k*(++k-8);
System.out.println(p);

++k 被评估时 k=9 然后变成 k*(9-8) 给出 9*1

int p,k=8;
p=(++k-8)*k;
System.out.println(p);

但这给出了 9 作为输出

你有一个乘法

left side:  k  
right side: (++k-8)

如您正确所述,大括号优先。但是,您的程序仍然运行 "from left to right"。所以首先评估左侧,即 k = 8。然后评估右侧,即 (++k-8) = 1。 现在我们确定了两边,可以将它们相乘:8*1 = 8.

这是您的代码编译后的 class 文件:

   int k = 8;
    byte var10000 = k;
    int k = k + 1;
    int p = var10000 * (k - 8);
    System.out.println(p);