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
}
}
计算步骤:
++x = 6
6 + x++ * y-- = 6 + 6 * 10 = 6 + 60 = 66
(此后 y
将变为 9
因为 y--
而 x
将变为 7
因为 x++
但是x
这个增加的值在后面的计算中从来没有用过)
66 - 8 = 58
(在[=22=减去y
之前,因为--y
会变成8
)
我有问题要逐步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
}
}
计算步骤:
++x = 6
6 + x++ * y-- = 6 + 6 * 10 = 6 + 60 = 66
(此后y
将变为9
因为y--
而x
将变为7
因为x++
但是x
这个增加的值在后面的计算中从来没有用过)66 - 8 = 58
(在[=22=减去y
之前,因为--y
会变成8
)