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逻辑运算符之间的主要区别
我希望它能帮助你