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

Gen*_* S. 0 java logic android operator-precedence

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


if(A == true && B == true || C == true);
Run Code Online (Sandbox Code Playgroud)

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

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

Mat*_*nen 7

它不是关于VM,VM工作在较低级别,甚至看不到表达式与您在Java中编写它们的顺序相同.这里重要的是运算符优先级:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

就像他们在学校教你"加法前的乘法"一样,所有其他运算符也是优先考虑的.在Java的情况下,&&优先级高于||.因此

(A == true && B == true || C == true)
Run Code Online (Sandbox Code Playgroud)

相当于

((A == true && B == true) || C == true)
Run Code Online (Sandbox Code Playgroud)

但实际上,就像你说的那样,使用那些括号.它使阅读更容易.

免费protip:== true是多余的.它没有做任何事情.替换A == true为just A.