【问题标题】:Order of precedence for logical operations with parentheses (Java) [duplicate]带括号的逻辑运算的优先顺序(Java)[重复]
【发布时间】:2020-12-11 18:41:49
【问题描述】:

只是想知道在 java 的布尔表达式中括号是否比逻辑运算符具有更高的优先级。

例如: (x > 0 || x 0 || (x

(修改后的格式)

【问题讨论】:

  • 括号之间的操作具有总是更高的优先级。
  • 在您的示例中,您使用:x > 0 || (x < 10 && y < 0) 您是否希望 OR 运算符右侧的条件首先执行?
  • 您是否至少自己努力寻找答案?

标签: java logical-operators boolean-expression


【解决方案1】:

逻辑条件中括号的存在不会改变条件的优先级,因为布尔运算总是从左到右执行。

方括号可用于“分组”在较大表达式中使用的子条件,但这些子条件的存在不会赋予其执行任何优先级。请看下面的例子:

 class Scratch {
    public static void main(String[] args) {
        if (f() || (t() && f())){
            System.out.println("finish");
        }
    }

    public static boolean f() {
        System.out.println("false");
        return false;
    }

    public static boolean t() {
        System.out.println("true");
        return true;
    }
}

这将输出:

false
true
false

因为这对应于从左到右的执行顺序。请注意,如果 OR 函数的第一个条目为真(在我的示例代码中使用 t()),则甚至不会评估后一个条件,因为 OR 条件已经满足。

【讨论】:

    【解决方案2】:

    是的,他们有。这就像在数学运算上添加括号以分开。你提供的例子不一样。

    在第一个中,您是说:如果这些条件中的任何一个为真并且其他条件为真→然后返回真。这意味着第二个条件必须始终为真。

    在第二个中你说:如果第一个条件为真或其他两个条件都为真→然后返回真。这意味着如果第一个条件为真,则您不必关心其余的。

    假设我们为 X 插入值 1,为 Y 插入值 2。第一个将返回 false,因为无论 X 值如何,Y 都必须小于 2。 然而,第二种情况将返回 true。由于 X 大于 0,所以它会返回 true,因为它不关心其余部分,因为它是一个 OR 门。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      相关资源
      最近更新 更多