在 android 中,即使第一个块评估为真,也会评估 IF OR 块

以下代码崩溃。似乎在android中,即使第一个块评估为“true”,IF OR块也会被评估。


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()”


我无法弄清楚这里的问题,有人遇到过这样的问题吗?


幕布斯7119047
浏览 157回答 2
2回答

狐的传说

代码完全正确if (ti == null || !ti.isValid()) { ... }空指针异常必须与其他事情有关;例如里面isValid。

米脂

从文档:条件或运算符 ||在运行时,首先计算左边的操作数表达式;如果结果具有布尔类型,则进行拆箱转换。如果结果值为真,则条件或表达式的值为真并且不计算右侧操作数表达式。所以 if tiis nullthen!ti.isValid()不会被评估,所以不会有问题。但是如果ti不是,null那么!ti.isValid()它不会抛出 NPE,因为ti不是null。所以也许异常是在其他地方抛出的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java