java - 这是一个好的 IF block 吗?

标签 java conditional-statements

这些比较总是不会产生 NullPointer 异常吗?

if( myObject == null || myObject.someMethod() == someValue )
{
    if( myObject == null && myObject.getAlwaysTrue() )
       {

       }
}

除了短路之外,java 中是否有一些用于条件评估的方向优先级?

更新:我知道 myObject.anything() 会抛出 NullPointer。只是我遇到过其他程序员的此类代码,我想知道是否有一种安全的方法可以在单个条件下压缩多个检查和 null 检查。我正在寻找要遵守的好规则。

最佳答案

不,这条线不安全:

if( myObject == null && myObject.getAlwaysTrue() )

如果您知道 myObject 为 null,那么您不应该尝试取消引用它。但是,如果您这样写:

if( myObject != null && myObject.getAlwaysTrue() )

这样就安全了。这是因为 &&(和 || 就此而言)有 short-circuit evaluation .如果您编写 a && b 并且表达式 a 的计算结果为 false,则表达式 b 不会被计算,因此它不会抛出异常。左操作数总是先求值。

关于java - 这是一个好的 IF block 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12099904/

相关文章:

java - 结果有问题

postgresql - 在 PostgreSQL-11 中有条件地更新字段时出错

java - 如何读取两个数字之间的数字?

Bash 怪异 : Exit Codes of Arithmetic Expressions in Relation to Conditionals. 真/假与成功/失败

Java 类与 JFrame 之间的通信 JDialog

Java 从原始类型 ArrayList 获取字段

internet-explorer - IE9 浏览器模式和条件注释

python - Django 条件注释计数与过滤器(多对多)关注者/下表

java - 使用带有 -clientjar 选项的 jaxws-maven-plugin

java.lang.NoClassDefFoundError : Failed resolution of: Lcom/google/android/gms/common/GooglePlayServicesUtil 错误