Java中的优先级

时间:2017-07-11 08:18:46

标签: java increment operator-precedence

根据优先级表,一元后缀递增和递减运算符比关系运算符具有更多的优先级,那么为什么在这样的表达式(x ++> = 10)中首先计算关系运算符然后递增变量?

5 个答案:

答案 0 :(得分:7)

首先评估操作员。订购是:

  • 评估LHS(x++) - 结果是x的原始值,然后x递增
  • 评估RHS(10) - 结果为10
  • 比较LHS和RHS的结果

以下代码用于演示:

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. |
+----------+-------------------+------------+-----------------------------------------------------------------------------------+

然后,考虑以下java程序:

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
    }
}