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是否为真(在这种情况下,整个陈述最终为真).
它不是关于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.
| 归档时间: |
|
| 查看次数: |
49 次 |
| 最近记录: |