boolean A = true;
boolean B = false;
boolean C = true;
if(A == true && B == true || C == true);
我有理由认为这会被评估为假吗? (还是真的?)
我理解这里最好的事情就是将两个参数包装在他们自己的parens中,但我对Java VM很好奇并且它是否一致(特别是在Delvik的情况下) 。是否看到B是假的并且退出(因为&&&&&&&&&&&)似乎要求它是真的,如果从左到右阅读它或者它本身将两个项目分组在||的两侧并继续关注C是否为真(在这种情况下,整个陈述最终为真)。
答案 0 :(得分:7)
它不是关于VM,VM工作在较低级别,甚至看不到表达式的顺序与在Java中编写它们的顺序相同。这里重要的是运算符优先级:
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
就像他们教你"加法前的乘法"在学校,所有其他运营商也都优先考虑。在Java的情况下,&&
的优先级高于||
。因此
(A == true && B == true || C == true)
相当于
((A == true && B == true) || C == true)
但实际上,就像你说的那样,使用那些括号。它使阅读更容易。
免费protip:== true
是多余的。它没有做任何事情。仅使用A == true
替换A
。
答案 1 :(得分:0)
订单在Java语言级别上得到了很好的定义(因此它可以在JVM和Dalvik上运行)。
基本上
后一点我个人永远无法记住或至少可靠地快速解析,所以我总是使用parens来明确。使阅读更容易。