有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java空安全检查和if条件优先

假设这样一个场景

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

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

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


共 (3) 个答案

  1. # 1 楼答案

    以上代码是安全的。如果第一个计算是^{,JVM将使第二个计算短路

    报告(部分)说

    The conditional-and operator && is like & (§15.22.2), but evaluates its right-hand operand only if the value of its left-hand operand is true.

  2. # 2 楼答案

    当你使用&&;,所有条件将从左到右执行,直到其中一个条件被评估为false

    例如:

    A && B && C
    

    如果B为false,则不计算C

    但是,如果只使用一个&;,则;,您的所有条件都将被评估,即使其中一个条件是错误的。这是&;及&;作为逻辑运算符

    我希望它能帮助你

  3. # 3 楼答案

    完全安全,当第二个线程无法更改适配器时

    Java8可能会产生一个Optional<Adapter>,并允许使用不同的公式