【问题标题】:Does using a parenthesis make a difference when using && or ||?使用 && 或 || 时使用括号会有所不同吗?
【发布时间】:2019-02-04 23:15:38
【问题描述】:

一个比另一个更受欢迎吗?如果有,为什么?

 int value1 = 1;
 int value2 = 2;

 if (value1 == 1 && value2 == 2) {
    System.out.println("works");
    }

 if ((value1 == 1) && (value2 == 2)) {
    System.out.println("works");
    }

预期结果与实际结果相符。两者都打印字符串“works”

【问题讨论】:

  • 没有任何区别。
  • 但是使用括号确实表明了您的意图,因此下一个查看代码的人不必尝试确定原始作者(您)是否理解优先顺序。 (在这种情况下不一定,但特别是在比较中混合 && 和 || 时)。
  • 在这种情况下技术上没有区别,但如果你想要一个一般规则,我建议你使用大括号并交换操作数。 (( 1 == value1) && ( 2 == value2))
  • @Aubin 这实际上是我一直在使用的

标签: java logic comparison and-operator


【解决方案1】:

括号可用于对逻辑表达式进行分组,就像在数学表达式中一样。

它使优先顺序更清晰。

在这种情况下不需要它们,因为您只使用 2 个表达式。

但是在使用OR 和AND 的类似情况下会发生什么?

这可能会导致一个模棱两可的情况:

if (a && b || c)

将被解释为:

if ((a && b) || c)

当您希望表达式被视为:

if (a && (b || c))    

【讨论】:

  • 括号是否会创建优先于哪个表达式先被评估的优先级,尽管它是左 --> 右,类似于数学?
  • @NishGrewal 当您说 “评估哪个表达式” 时,您似乎在混合 associativity(从左到右与从右到-left) 和 运算符优先级(例如 * 在 + 之前),求值顺序(总是从左到右)。
  • 在 Java 中,operator precedence 表示 && 在 || 之前评估,与 * 在 + 之前评估的方式相同,因此您的 “可能被解释为” 不正确。但是,在混合 && 和 || 时始终使用括号是个好主意,因为太多人不知道这些运算符的优先级。
  • @Andreas 感谢您的澄清,非常感谢您帮助我。
  • 从字面上看你给出的情况,a && b || c,那么我不会打扰。它足够简单且易于阅读。但对于更复杂的条件,我可能会。我在这里给出的建议是培养一些品味并根据您的判断来判断什么是合适的;从长远来看,这将比遵循一套规则更好地为您服务。或者换一种说法,如果它看起来模棱两可对你然后添加括号,否则不要。追求工艺!
猜你喜欢
  • 2015-08-13
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
  • 2021-08-31
  • 1970-01-01
  • 2012-10-24
  • 2011-01-12
相关资源
最近更新 更多