前递增操作优先于后递增操作

问题描述 投票:0回答:1

封装测试;

公开课测试{

public static void main(String [] args) {

    int a = 10;
    int b = 12;
    
    System.out.println( ++a == 11 || b++ == 12);
    System.out.println("a= "+a);
    System.out.println("b= "+b);
}

}

o/p: 真的 一个= 11 b=12

根据java优先级,后自增运算符的优先级高于预自增运算符。 https://introcs.cs.princeton.edu/java/11precedence/

那么,为什么不先评估后自增操作,而是先评估前自增操作呢?

我知道这里已经进行了短路。 首先评估“++a == 11”,因为它是 true,所以尚未评估 b++ == 12。

这是否意味着逻辑运算符比 Java 中的所有其他运算符具有更高的优先级?

我尝试评估表达式 ++a == 11 ||在 Java 程序中,b++ == 12 并期望首先计算后自增操作 b++,因为后自增运算符的优先级高于预自增运算符。如果执行 b++,我希望输出显示 true,a= 11,b= 13。

实际结果如何?

输出为: 真的 一个= 11 b=13

java operator-keyword logical-operators operator-precedence post-increment
1个回答
0
投票

所有二元运算符(例如逻辑 OR)(赋值运算符除外)都是从左到右计算的。您关于短路的假设是正确的。您对逻辑运算符优先级的假设不太正确。事实上,只有三元运算符和赋值运算符的优先级低于逻辑 OR,如您在此处看到的:https://docs.oracle.com/javase%2Ftutorial%2F/java/nutsandbolts/operators.html

还要考虑前缀和后缀增量以不同的方式工作,这可能会影响代码的行为方式。无论如何,在您的代码中,

a
首先会递增,然后与 11 进行比较。确实如此,逻辑 OR 的第二个操作数不会被计算。与以下内容进行比较:

public static void main(String [] args) {
    
        int a = 10;
        int b = 12;
    
        System.out.println( ++a == 11 | b++ == 12);
        System.out.println("a= "+a);
        System.out.println("b= "+b);
    }

输出:

真实

a=11

b=13

© www.soinside.com 2019 - 2024. All rights reserved.