为什么以下表达式返回true?

时间:2013-07-28 21:54:15

标签: java operators short-circuiting

我很难理解Java中短路运算符的优先级。根据短路行为,表达式“true || true”的右边部分在这里无关紧要,因为曾经“&&”的第一部分条件被评估为“假”,表达的其余部分应该没有被评估。

但是,在执行下面的代码时,我看到结果声明为“true”。有人可以向我解释一下吗?

    public class ExpressionTest{
        public static void main(String[] args) {
        boolean result1 = false && true || true;
        System.out.println(result1);
        }
    }

2 个答案:

答案 0 :(得分:4)

在运营商上查看此tutorial。该表清楚地表明&&的优先级高于||

所以,

false && true || true;

评估为:

(false && true) || true;

休息我认为你可以自己评估。

答案 1 :(得分:4)

来自The JAVA turorial

  

同一行上的运算符具有相同的优先级。当经营者   相同的优先级出现在同一个表达式中,必须遵守规则   首先评估。除了之外的所有二元运算符   赋值运算符从左到右进行评估;分配   运营商从右到左进行评估

因此,编译器将其解析为

boolean result1 = (false && true) || true;

因此,无论A || true值如何,true都会返回A

要获得理想的表达式,请执行以下操作:

boolean result1 = false && (true || true);