根据优先级表,一元后缀递增和递减运算符比关系运算符具有更多的优先级,那么为什么在这样的表达式(x ++> = 10)中首先计算关系运算符然后递增变量?
答案 0 :(得分:7)
首先评估操作员。订购是:
x++
) - 结果是x
的原始值,然后x
递增10
) - 结果为10 以下代码用于演示:
public class Test {
static int x = 9;
public static void main(String[] args) {
boolean result = x++ >= showXAndReturn10();
System.out.println(result); // False
}
private static int showXAndReturn10() {
System.out.println(x); // 10
return 10;
}
}
打印出10
然后打印false
,因为在评估RHS时x
已经递增了......但是{{1} }运算符仍在评估>=
,因为表达式9 >= 10
的结果是x++
的原始值,而不是递增的值。
如果您希望增加后的结果,请改用x
。
答案 1 :(得分:4)
在增量之前不评估关系运算符。
首先评估关系运算符(x++
和10
)的操作数。
但是,x++
增量x
的评估会返回x
的原始值,所以即使增量已经发生,传递给关系运算符的值也是原始值价值x
。
答案 2 :(得分:2)
你的结论不正确。 x ++被评估为第一个,只是它的值是在为后缀增量操作定义的增量之前的x的值。
答案 3 :(得分:1)
因为这是" ++, - "在工作中。如果它在变量之后,则使用旧值,然后值增加,如果它在变量之前,则首先发生增量,然后使用新值。 因此,如果您想在增加其值之后使用该变量并在检查之前使用该变量,则使用(++ x> = 10),或者在没有引用的情况下增加它,然后检查它,如下所示:
int x = 0;
x++;
if(x >= 10) {...}
答案 4 :(得分:1)
但是,您将一元运算符放在表达式中,下表总结了它的用法。
+----------+-------------------+------------+-----------------------------------------------------------------------------------+
| Operator | Name | Expression | Description |
+----------+-------------------+------------+-----------------------------------------------------------------------------------+
| ++ | prefix increment | ++a | Increment "a" by 1, then use the new value of "a" in the residing expression. |
| ++ | postfix increment | a++ | Use the current value of "a" in the residing expression, then increment "a" by 1. |
| -- | prefix decrement | --b | Decrement "b" by 1, then use the new value of "b" in the residing expression. |
| -- | postfix decrement | b-- | Use the current value of "b" in the residing expression, then decrement "b" by 1. |
+----------+-------------------+------------+-----------------------------------------------------------------------------------+
public class UnaryOperators {
public static void main(String args[]) {
int n;
// postfix unary operators
n = 10;
System.out.println(n); // prints 10
System.out.println(n++); // prints 10, then increment by 1
System.out.println(n); // prints 11
n = 10;
System.out.println(n); // prints 10
System.out.println(n--); // prints 10, then decrement by 1
System.out.println(n); // prints 9
// prefix unary operators
n = 10;
System.out.println(n); // prints 10
System.out.println(++n); // increment by 1, then prints 11
System.out.println(n); // prints 11
n = 10;
System.out.println(n); // prints 10
System.out.println(--n); // decrement by 1, then prints 9
System.out.println(n); // prints 9
}
}