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

Java 空安全检查和if条件优先,java,nullpointerexception,Java,Nullpointerexception,假设这样一个场景 if(event.getAdapter() != null && event.getAdapter().getCount() > 0) 在上面的代码中,首先检查它是否为null,然后检查count是否高于零。如果在第二个条件之前检查第一个条件,则此代码将按预期工作。但如果(我听说jvm有时会开始检查大多数故障条件以加快速度)第二个条件比第一个条件被检查,那么这段代码将给出运行时错误 所以我的问题是,上面的检查代码安全吗?它会按预期工作吗?或者jvm有时

假设这样一个场景

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


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

以上代码是安全的。如果第一次评估为
false
,JVM将使第二次评估短路

报告(部分)说

条件and运算符
&
类似于
&
(),但仅当其左侧操作数的值为
true
时,才计算其右侧操作数


以上代码是安全的。如果第一次评估为
false
,JVM将使第二次评估短路

报告(部分)说

条件and运算符
&
类似于
&
(),但仅当其左侧操作数的值为
true
时,才计算其右侧操作数

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

Java 8可能会生成一个
可选的
,并允许使用不同的公式。

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


Java 8可能会产生一个
可选的
,并允许使用不同的公式。

使用&&时,所有条件都将从左到右执行,直到其中一个条件被计算为false为止

例如:

A && B && C
如果B为false,则不计算C

但是,如果只使用一个&,则将计算所有条件,即使其中一个为false。这是&和&&as逻辑运算符之间的主要区别


我希望它能对您有所帮助。

当您使用&&时,所有条件都将从左到右执行,直到其中一个条件被计算为false为止

例如:

A && B && C
如果B为false,则不计算C

但是,如果只使用一个&,则将计算所有条件,即使其中一个为false。这是&和&&as逻辑运算符之间的主要区别

我希望它能帮助你