&&
的优先级高于 ||
(来源)。因此,添加括号以强调它们的计算方式:
if (true || ((false || true) && false))
// -------------^-------------------------^
和
if ((false && (false || true)) || true)
// -----^-------------------------^
正如您所看到的,x || y
这一表达式中,x
在第一个示例中为 true
,而 y
在第二个示例中为 true
。自然地,true || false
和 false || true
都是 true
。
您可以使用输出当前操作的方法(实时演示)来查看它的运行情况(请记住,||
和 &&
操作符都采用短路求值,即不会评估不影响结果的操作数):
public class Test
{
private static boolean b(String label, boolean value) {
System.out.println(label + ": " + value);
return value;
}
public static void main(String[] args)
{
if (b("1", true) || (b("2", false) || b("3", true)) && b("4", false))
{
System.out.println("How does this condition becomes true.");
}
if (b("5", false) && (b("6", false) || b("7", true)) || b("8", true))
{
System.out.println("Same with this condition, why is it true.");
}
}
}
运行时,会输出:
1: true
这个条件是如何变为true的。
5: false
8: true
同样也是这个条件,为什么它是true的。