首页 > 解决方案 > JAVA IF 语句将如何评估 if || (OR) 和 && (AND) 放在同一个 if 语句中

问题描述

目前我正在做一个小的个人项目来帮助自己学习编码。我想知道是否可以在单个 if 语句中组合不同类型的逻辑运算符以供将来参考。

例如,如果我有

if (n == 0 || n == 1 && m == 0 || m == 1) {
  doSomething();
}

它会检查左侧的任一部分是否为真,然后右侧的任一部分是否为真,还是会做类似于检查中间两个部分是否为真的事情?

使用括号会改变任何东西吗例如

if ((n == 0 || n == 1) && (m == 0 || m == 1)) {
  doSomething();
}

编辑:根据一个建议,我尝试了它,但是当我放入三个变量时,它开始表现得很奇怪这是我的测试:

int n = 1;
int m = 1;
int o = 1;

if (n == 0 || n == 1 && m == 0 || m == 1 && o == 0 || o == 1) {
  System.out.println("True");
}
else {
  System.out.println("False");
}

if ((n == 0 || n == 1) && (m == 0 || m == 1) && (o == 0 || o == 1)) {
  System.out.println("True");
}
else {
  System.out.println("False");
}

如果它们都是 1 或 0,则它们都评估为真,如果 n 或 m 不是 1 或 0,则顶部评估为 true,但底部不评估。

但是,如果 o 不是 0 或 1,它们都是假的。我发现括号确实有所作为,但我不能完全说明为什么它会这样。

标签: javaif-statementlogical-operatorsoperator-precedence

解决方案


&&then 的优先级更高||,所以n == 0 || n == 1 && m == 0 || m == 1equals n == 0 || (n == 1 && m == 0) || m == 1您可以在此处查看优先级表。


推荐阅读