逻辑AND和逻辑OR运算符优先级

时间:2014-07-07 04:05:29

标签: java

逻辑AND &&的优先级高于逻辑OR ||

这是简单的java代码http://ideone.com/KWUOla

import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        if( A() || B() && C() && D() ){
            System.out.println("done...");
        }
    }
    public static boolean A(){
        System.out.println("This is class A");
        return true;
    }
    public static boolean B(){
        System.out.println("This is class B");
        return true;
    }
    public static boolean C(){
        System.out.println("This is class C");
        return true;
    }
    public static boolean D(){
        System.out.println("This is class D");
        return true;
    }    
}

在此程序中,函数A()首先完成,然后计算OR,因为左操作数为真,所以满足if条件。

但是根据优先级表,在评估逻辑OR &&之前,应评估所有逻辑AND ||

Java对逻辑AND &&和逻辑OR ||具有相同的优先级吗?如果没有,请澄清逻辑AND &&和逻辑OR ||之间的优先顺序。

2 个答案:

答案 0 :(得分:3)

优先规则通过有效添加括号来消除歧义:

A() || ((B() && C()) && D())

括号不会影响执行顺序,始终从左到右。

然后如你所说,它不需要计算右侧或左侧是真的。 (这称为短路)。

答案 1 :(得分:-1)

它只运行A(),因为它返回true。我强烈建议使用括号。