【问题标题】:What are the possible ways the following expression is actually evaluated?实际评估以下表达式的可能方式是什么?
【发布时间】:2021-08-21 21:27:31
【问题描述】:

注意 - 假设代码是 JAVA 格式

假设我有一个函数 -

public boolean Helper(){
boolean a = ...;
boolean b = ...;
boolean c = ...;
boolean d = ...;
return a || b && c || d;
}

我想了解实际评估表达式的可能方式。我不是在谈论我们填写 1 和 0 的逻辑表。 例如 - 据我了解,如果 a 为真,其余变量的值无关紧要。(因为会有短路评估) 有人可以帮我列出所有这些结论吗?这个布尔表达式让我很困惑

【问题讨论】:

  • 用代表实际评估逻辑的括号重写表达式(由于运算符的优先级),然后应用短路规则(如true || x 不会评估x)。它应该相对简单。
  • 更改这段代码不在我的手中。我只能研究它并得出结论
  • 请您帮我找出所有可能的情况
  • 您仍然可以通过将@GaëlJ 为自己建议的括号放置来分析代码。这只是一种更简单的方式来可视化无论如何会发生什么(尝试谷歌“运算符的优先级”——这会对你有很大帮助)。
  • @xerx593 - 在 Java 和大多数其他编程语言以及命题逻辑中,“and”优先于“or”。

标签: java boolean short-circuit-evaluation


【解决方案1】:

你只需要知道三件事:

  1. 优先规则。这被评估为(a || b) && (c || d)a || (b && c) || d((a || b) && c) || d。只需在网上搜索“java 运算符优先级”即可得到答案。

  2. 意识到在 java 中,双倍版本的 or 和 and 运算符(||&&,在这里使用)'短路'。如果a 为假,a && b 将不会评估 b,因为结果是已知的。

  3. 基本逻辑表。

所有这些东西都是很容易找到的。我认为家庭作业部分涉及您实际查看所有这些内容:)

【讨论】:

    猜你喜欢
    • 2013-06-18
    • 1970-01-01
    • 2020-10-02
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 2022-01-06
    • 2011-08-08
    相关资源
    最近更新 更多