java 表达式计算和运算符优先级

java expression calculation and operator precedence

我有问题要逐步java表达式计算

System.out.println(++x + x++ * y-- - --y);

我知道这个优先级: 1. 后缀一元 2.前缀一元 3.乘法 4.添加剂

但是当我用这个优先级计算时,结果如下: // 12 + 11 * 19 - 18 谁能帮帮我

一元后缀在变量求值之后应用,与前缀相反,在求值之前应用,您的表达式可以重写:

int x_prefix = x + 1; // ++x
int y_prefix = y - 1; // --y

System.out.println(x_prefix + x * y - y_prefix);

int x = x + 1; // x++
int y = y - 1; // y--

你写运算符优先级,这是对的,但每个运算符都有自己的行为,在后缀递增的情况下,当然必须在其他人之前评估,但它的行为是 return 当前变量和递增之后值。

注意:我只是按原样重写了你的表达式,如果你在同一个表达式中使用递增的变量后缀,下一次访问会看到递增的变量:

int x = 1;

System.out.println(x++ + x++); // 1 + 2
System.out.println(x) // 3

完整性:

int x = 1;

System.out.println(++x + ++x); // 2 + 3
System.out.println(x) // 3

你可以从下面给出的例子中理解:

public class Main {
    public static void main(String[] args) {
        int x = 5, y = 10;
        System.out.println(++x + x++ * y-- - --y);// 6 + 6 * 10 - 8 = 58
    }
}

计算步骤:

  1. ++x = 6
  2. 6 + x++ * y-- = 6 + 6 * 10 = 6 + 60 = 66(此后 y 将变为 9 因为 y--x 将变为 7 因为 x++ 但是x这个增加的值在后面的计算中从来没有用过)
  3. 66 - 8 = 58(在[=22=减去y之前,因为--y会变成8