以下代码崩溃。似乎在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()'
我在这里找不到问题,有人遇到过这样的问题吗?
答案 0 :(得分:2)
代码完全正确
if (ti == null || !ti.isValid()) { ... }
空指针异常必须涉及其他问题;例如isValid
内。
答案 1 :(得分:0)
条件或运算符||
在运行时,左侧操作数 首先评估表达式;如果结果为布尔类型,则为 进行拆箱转换。
如果结果是 true,则条件或表达式的值为true,并且 右手操作数表达式不求值。
因此,如果ti
为null
,则不会评估!ti.isValid()
,因此不会有问题。
但是,如果ti
不是null
,那么!ti.isValid()
却不会抛出NPE,因为ti
不是null
。
所以也许异常抛出在其他地方。