Java 复合赋值运算符在表达式中的优先级

sun*_*985 3 java expression compound-assignment

当我尝试执行以下代码时,其输出被声明为“6”。

当我试图思考这个问题时,表达式“k += 3 + ++k; 应该被评估为 k = k + (3 + ++k); 但在这种情况下,输出应该是 7。看起来就像它被评估为 k = k + 3 + ++k; 结果是 6。

有人可以解释一下为什么表达式被计算为“k + 3 + ++k”而不是“ k + (3 + ++k); 吗?

public class TestClass {

public static int m1(int i){
    return ++i;
}

public static void main(String[] args) {

    int k = m1(args.length);
    k += 3 + ++k;
    System.out.println(k);
}
Run Code Online (Sandbox Code Playgroud)

}

Roh*_*ain 6

看一下JLS - 复合赋值运算符中的行为。为了答案的完整性,我将在这里引用相关的两段:

否则,保存左侧操作数的值,然后计算右侧操作数。如果此计算突然完成,则赋值表达式也会出于同样的原因突然完成,并且不会发生赋值。

否则,使用左侧变量的保存值右侧操作数的值来执行由复合赋值运算符指示的二元运算。如果此操作突然完成,则赋值表达式也会出于同样的原因突然完成,并且不会发生赋值。

强调我的。

因此,首先评估左侧操作数,并且仅执行一次。然后,1在您的情况下,左侧操作数的评估值与右侧操作数的结果相加,结果为5。于是就有了结果6