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
相反,这段代码就好像它只是从左到右评估表达式,评估后递减之前的预增量。为什么呢?
答案 0 :(得分:1)
int y = ++x * 5 * x--;
++x => Increase then evaluate => x == 4
x-- => Evaluate then decrease
所以实际上它看起来像这样:
int y = 4 * 5 * 4; // == 80
由于减量运算符,最后您的x
为3
。
答案 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的值。