短路AND,OR和优先级表

时间:2015-05-22 12:25:20

标签: java

你好我有一个关于java中优先级表的问题。它说和&&优先于||。

boolean b,c,d;
b = c = d = false;
boolean e = (b = true) || (c = true) && (d = true);
System.out.println(b+" "+c+" "+d);

当我运行提到的代码时,它输出" true false false"。为什么它没有评估c = true&& d =真正的第一部分,因为&&有更高的优先权?提前致谢

2 个答案:

答案 0 :(得分:4)

JVM评估返回true的b = true。因此,表达式

boolean e = (b = true) || (c = true) && (d = true);

相当于

boolean e = true || (c = true) && (d = true);

总是导致true而不需要"评估" c = trued = true

换句话说,boolean e = (b = true) || (c = true) && (d = true);类似于:

boolean e;
if(b = true) {
    e = true;
} else if((c = true) && (d = true)) {
    e = true;
} else {
    e = false;
}

答案 1 :(得分:4)

这里的优先权仅仅意味着

X || Y && Z

相当于:

X || (Y && Z)

执行为:

  • 评估X
  • 如果X为true,则结果为true
  • 否则,请评估Y
    • 如果Y为false,则Y && Z的结果为false,因此整体结果为false
    • 否则,请评估Z
    • 如果结果为true,则Y && Ztrue,因此整体结果为true
    • 如果结果为false,则Y && Zfalse,因此整体结果为“false