【问题标题】:Java: OR Operator after AND in "If" StatementJava:“If”语句中 AND 之后的 OR 运算符
【发布时间】:2019-02-10 20:41:57
【问题描述】:

基于thisthis 答案Java 对&&|| 运算符采用短路。它还赋予&& 高于|| 的优先级。然而,以下代码的计算结果为 true

    boolean condition1 = true;
    boolean condition2 = true;
    boolean condition3 = true;

    if ( !condition3 && condition1 || condition2 ) {
        System.out.println("Condition is true"); // prints Condition is true
    }

由于condition3 设置为true,这应该会导致!condition3 为假,那么为什么Java 还要检查condition1

如果我在第一个条件周围添加括号,它仍然评估为真:

    if ( (!condition3) && condition1 || condition2 ) {
        System.out.println("Condition is true");
    }

我理解为什么这段代码的计算结果为 true:

    if ( condition1 || condition2 && !condition3) {
        System.out.println("Condition is true");
    }

因为一旦Java 在condition1 之后遇到||,它甚至不会检查以下条件。但我不明白为什么前两个示例的计算结果为 true。

我的目标是要求condition3 为假,然后任一 conditon1condition2(或两者)为真(但如果condition3true 那么无论condition1condition2 如何评估,我都不想执行打印语句)

谢谢

【问题讨论】:

  • “我的目标是要求条件 3 为假,然后让条件 1 或条件 2(或两者)为真” if ((!condition3)&&(condition1||condition2))
  • 好的,所以我错过了 condition1 || condition2 周围的括号。但是为什么仅在 !condition3 周围添加括号是不够的(给予 !condition3 更高的优先级)?
  • “更高的优先级”意味着这部分“更接近”然后其他部分。 &&结果 成为 || 的一侧

标签: java if-statement operators


【解决方案1】:

你说:

它还赋予 && 高于 || 的优先级。

这意味着!condition3 && condition1将首先被评估。

所以这个

!condition3 && condition1 || condition2

等于:

(!condition3 && condition1) || condition2

因为condition2true,所以表达式是true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2014-05-30
    • 2012-12-19
    • 2012-11-04
    • 1970-01-01
    相关资源
    最近更新 更多