空安全检查,如果条件优惠

时间:2016-02-14 20:37:04

标签: java nullpointerexception

假设这样的场景;

if(event.getAdapter() != null  && event.getAdapter().getCount() > 0)

在上面的代码中,首先我检查它是否为null然后我检查是否计数是否高于零。如果在第二个条件之前检查第一个条件,那么此代码将按预期工作。但是如果(我听说jvm有时开始检查大多数失败条件以加速)第二个条件被检查比第一个条件,那么这个代码将给出运行时错误。

所以我的问题是,检查代码是否安全?它会按预期工作吗?或 jvm有时会从第二个条件开始?

3 个答案:

答案 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;作为逻辑运算符。

我希望它会对你有所帮助。

相关问题