如果后递增/递减优先于预递增/递减,那么为什么这个表达式的评估如下:

时间:2016-07-29 13:42:30

标签: java operator-precedence

public class Test {
    public static void main(String[] args) {
        int x = 3;
        int y = ++x * 5 * x--;
        System.out.println("x is " + x);
        System.out.println("y is " + y);
    }
}

输出结果为:

x is 3
y is 80

但是使用后运算符优先于前运算符的规则,不应该是这样的:

y = ++x * 5 * 3 (x is 2)
y = 3 * 5 * 3 (x is 3)
y = 45

相反,这段代码就好像它只是从左到右评估表达式,评估后递减之前的预增量。为什么呢?

2 个答案:

答案 0 :(得分:1)

int y = ++x * 5 * x--;

++x => Increase then evaluate => x == 4
x-- => Evaluate then decrease

所以实际上它看起来像这样:

int y = 4 * 5 * 4; // == 80

由于减量运算符,最后您的x3

答案 1 :(得分:-1)

您的问题是y = ++x * 5 * 3 (x is 2)而不是(4)*5*3 (4)*5*4。 Pemdas我的朋友

    int x = 3;
    int y = ++x * 5 * x--;  //x becomes 4 , then its 4*5*4 =80 = y
    System.out.println("x is " + x); // x-- comes into affect and x = 3
    System.out.println("y is " + y);  // y = 80

虽然在x ++和其他所有内容之前正在评估x--。它在评估整个表达式后更改x的值。与++ x评估时不同,它会立即更改x的值。