为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

幕布斯7119047 2021-12-18 09:53:31
以下代码崩溃。似乎在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()”我无法弄清楚这里的问题,有人遇到过这样的问题吗?
查看完整描述

2 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

代码完全正确

if (ti == null || !ti.isValid()) { ... }

空指针异常必须与其他事情有关;例如里面isValid


查看完整回答
反对 回复 2021-12-18
?
米脂

TA贡献1836条经验 获得超3个赞

文档

条件或运算符 ||
在运行时,首先计算左边的操作数表达式;如果结果具有布尔类型,则进行拆箱转换。
如果结果值为真,则条件或表达式的值为真并且不计算右侧操作数表达式。

所以 if tiis nullthen!ti.isValid()不会被评估,所以不会有问题。
但是如果ti不是,null那么!ti.isValid()它不会抛出 NPE,因为ti不是null
所以也许异常是在其他地方抛出的。


查看完整回答
反对 回复 2021-12-18
  • 2 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信