假设这样的场景;
if(event.getAdapter() != null && event.getAdapter().getCount() > 0)
在上面的代码中,首先我检查它是否为null然后我检查是否计数是否高于零。如果在第二个条件之前检查第一个条件,那么此代码将按预期工作。但是如果(我听说jvm有时开始检查大多数失败条件以加速)第二个条件被检查比第一个条件,那么这个代码将给出运行时错误。
所以我的问题是,检查代码是否安全?它会按预期工作吗?或 jvm有时会从第二个条件开始?
答案 0 :(得分:4)
完全安全,当第二个线程无法更改适配器时。
Java 8可能会产生Optional<Adapter>
并允许不同的公式。
答案 1 :(得分:2)
以上代码是安全的。如果第一个评估是&&
,JVM将使第二个评估短路。
JLS-15.23. Conditional-And Operator &&
说(部分)
条件和运算符
&
类似于true
(§15.22.2),但仅当其左侧操作数的值为{{1}时才计算其右侧操作数}。
答案 2 :(得分:0)
当您使用&amp;&amp;时,所有条件都将从左到右执行,直到您的某个条件被评估为false。
示例:
A && B && C
如果B为假,则不会评估C.
但是如果你只使用一个&amp;,那么即使一个是假的,你的所有条件都会被评估。这是和&amp;的主要区别。和&amp;&amp;作为逻辑运算符。
我希望它会对你有所帮助。