【问题标题】:In Java, a and b are booleans, would a&&b and b&&a evaluate to the same result? [duplicate]在 Java 中,a 和 b 是布尔值,a&&b 和 b&&a 的计算结果是否相同? [复制]
【发布时间】:2016-07-27 08:40:30
【问题描述】:

所以我在去年的 Comp Sci 期中考试中遇到了这个问题,但我仍然无法弄清楚为什么 a&&b 和 b&&a 不会得出相同的结果

在我看来,有 4 种可能的情况:

  1. A 为真,B 为真:
    • 真 && 真就是真
  2. A 为真,B 为假:
    • True && False 是 False 和 False && True 也是 False
  3. A 为假,B 为真:
    • 假 && 真为假,真 && 假为假
  4. A 为 FALSE,B 为 FALSE:
    • 假 && 假就是假

然而,期中的修正和教授说 a&&b 和 b&&a 并不总是评估到相同的结果。

编辑:我看不出这是“运算符短路”的重复...我绝不会问关于 AND 操作的第一部分的问题...我问的是两个部分并且与此重复的“原始”问题无法回答我的问题。

【问题讨论】:

  • 取决于 ab 将代表什么。 ab 可能会修改另一个表达式的状态
  • 如果 a 和 b 是变量,那么当然 a&&b 和 b&&a 给出相同的结果。但如果这些实际上是方法调用,情况就不同了(因为副作用)。
  • 首先,我不明白为什么 OldCurmudgeon 将此问题标记为“操作员短路”的重复...? ... 其次,非常感谢 GhostCat,我应该有方法调用,但如果我错了,请纠正我,但这是否意味着,例如,如果有人调用方法 a 并且该方法修改了 b 的输出而不是反过来,那么 a&&b 和 b&&a 确实不会评估到相同的结果?
  • @SilenT612 想象两个变量ab,都设置为false,以及两个方法a1b1a1 将简单地返回 ab1 将设置 abtrue 并返回 b。事实上a1&&b1 现在是false,因为a1 将返回a 的当前状态,即false。但是b1&&a1 会将a 修改为true 并将b 修改为true,这将导致整体true 声明。
  • @SilenT612 运算符短路在这里是相关的,因为这是两个语句可能不同的原因之一。当使用 a && b 时,表达式从左到右计算。如果 a 的计算结果为 false,则 b 不会被计算,因为 Java VM 已经知道表达式将为 false。但是,如果 a 评估为 true,则 b 也将被评估。因此 a && b 有时用作写作的简写: if(a) { b; }。因此很明显,当 a 和/或 b 不是简单的布尔常量或变量时,a 和 b 的顺序实际上很重要。

标签: java boolean logical-operators


【解决方案1】:

是的,您将得到相同的结果。但是如果你有 a&&b 并且 a 为 FALSE,那么 Java 将不会评估 b 并且会说结果为 FALSE。

【讨论】:

  • 最终结果是一样的。
  • @VaibhavBajaj 不一定。这取决于 a 和 b 的构建方式: if (((j += 1) > 2) && (i - 1 2))
猜你喜欢
  • 2010-11-21
  • 2014-03-29
  • 1970-01-01
  • 2021-10-06
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 1970-01-01
相关资源
最近更新 更多