你好我有一个关于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 =真正的第一部分,因为&&有更高的优先权?提前致谢
答案 0 :(得分:4)
JVM评估返回true的b = true
。因此,表达式
boolean e = (b = true) || (c = true) && (d = true);
相当于
boolean e = true || (c = true) && (d = true);
总是导致true
而不需要"评估" c = true
和d = 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)
执行为:
true
,则结果为true
Y
Y
为false,则Y && Z
的结果为false
,因此整体结果为false
Z
true
,则Y && Z
为true
,因此整体结果为true
false
,则Y && Z
为false
,因此整体结果为“false