Java 在android中,即使第一个块的计算结果为true,也会计算IF或block

Java 在android中,即使第一个块的计算结果为true,也会计算IF或block,java,android,Java,Android,正在为下面的代码获取崩溃。在android中,即使第一个块的计算结果为true,IF或块也会被计算 TileItem ti=null; ... // code which initialises reference ti if (ti == null || !ti.isValid()){ ... } 在一个函数块中,我将TileItem的对象初始化为ti,然后在ti不为null且有效时执行一些操作。idvalid正在验证TileItem对象的某些属性。但我得到了碰撞和碰撞日志说 致

正在为下面的代码获取崩溃。在android中,即使第一个块的计算结果为true,IF或块也会被计算

TileItem ti=null;
...
// code which initialises reference ti 

if (ti == null || !ti.isValid()){
    ...
}
在一个函数块中,我将TileItem的对象初始化为ti,然后在ti不为null且有效时执行一些操作。idvalid正在验证TileItem对象的某些属性。但我得到了碰撞和碰撞日志说

致命异常:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“boolean xxx.TileItem.isValid”


我无法找出这里的问题,有人遇到过这样的问题吗?

代码完全正确

if (ti == null || !ti.isValid()) { ... }
空指针异常必须与其他内容有关;例如,inside是有效的。

来自:

条件或运算符| |在运行时,左边的操作数 首先计算表达式;如果结果的类型为Boolean,则为 进行拆箱转换。如果结果值为 如果为true,则条件或表达式的值为true 未计算右侧操作数表达式

所以如果ti为null,那么!未评估ti.isValid,因此不会有问题。但是如果ti不是null,那么!ti.isValid是有效的,但它不会抛出NPE,因为ti不是null。 因此,异常可能被抛出到其他地方