目前我正在做一个小的个人项目来帮助自己学习编码。我想知道是否可以将不同类型的逻辑运算符组合在一个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,则它们都计算为true;如果n或m不是1或0则顶部计算为true,而底部不计算。
但是,如果o不是0或1,则这两个值都为false。我发现括号确实有区别,但我不太清楚它为什么会这样
&&
的优先级高于||
,因此n == 0 || n == 1 && m == 0 || m == 1
等于n == 0 || (n == 1 && m == 0) || m == 1
。您可以在这里查看优先级表。