这些比较总是不会产生 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/