Java 在android中,即使第一个块的计算结果为true,也会计算IF或block
正在为下面的代码获取崩溃。在android中,即使第一个块的计算结果为true,IF或块也会被计算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对象的某些属性。但我得到了碰撞和碰撞日志说 致
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。
因此,异常可能被抛出到其他地方