是否可以保证逻辑如何在Java中进行分组?

时间:2014-05-04 23:36:52

标签: java android logic operator-precedence

boolean A = true;
boolean B = false;
boolean C = true;


if(A == true && B == true || C == true);

我有理由认为这会被评估为假吗? (还是真的?)

我理解这里最好的事情就是将两个参数包装在他们自己的parens中,但我对Java VM很好奇并且它是否一致(特别是在Delvik的情况下) 。是否看到B是假的并且退出(因为&&&&&&&&&&&)似乎要求它是真的,如果从左到右阅读它或者它本身将两个项目分组在||的两侧并继续关注C是否为真(在这种情况下,整个陈述最终为真)。

2 个答案:

答案 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上运行)。

基本上

  • 从左到右
  • 快捷操作符缩短
  • && amp;和||

后一点我个人永远无法记住或至少可靠地快速解析,所以我总是使用parens来明确。使阅读更容易。