【问题标题】:Evaluating an expression with multiple boolean values评估具有多个布尔值的表达式
【发布时间】:2020-07-23 10:54:09
【问题描述】:

这对大多数程序员来说可能看起来很简单,但是看到下面的代码打印true,我有点惊讶。

//The actual implementation has proper logic, 
//just for simplicity I am using booleans in place of those logics

System.out.println(false && false || true && true || false && false);

因为我的看法是 - 如果第一个布尔值计算为 false 并且下一个操作数是 && 则 jvm 甚至不会尝试计算表达式的其余部分,而只是将整体视为 false

我希望下面的代码可以工作,但上面的代码不行:

System.out.println((false && false) || (true && true) || (false && false));

是否像编译器默认将&&s 分组在||s 之间

【问题讨论】:

    标签: java


    【解决方案1】:

    是否像编译器默认将 ||s 之间的 &&s 分组

    这正是它的作用。它被称为operator precedence。语言明确定义它,因为否则操作可能是模棱两可的,并且编译器不允许模棱两可。

    一个更简单的运算符优先级示例如下:

    x = 1 + 2 * 3;
    

    您希望结果是 9 还是 7?运算符优先级明确定义了结果必须是什么。

    【讨论】:

      猜你喜欢
      • 2013-12-15
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 2019-03-12
      相关资源
      最近更新 更多