我只是调试一些代码并找到了一些表达式:
if (mObject != null && a || b )
{
mObject.someMethod();
}
在mObject.someMethod()行中有一个NullPointerException - 所以我的问题是:
如何评估表达式?
1. a && b || c == a && (b || c)
或
2. a && b || c == (a && b) || c
如果是1.我可能需要查看一些多线程问题。
这可能是一个愚蠢的问题,我很确定之前曾被问过,但我在这里找不到答案。谢谢你的答案。
答案 0 :(得分:7)
相当于以下条件:
if ((mObject != null && a) || b )
&&
的优先级高于||
。
如果mObject
为空,如果b
为真,则条件可能会通过。
答案 1 :(得分:4)
!=
优先于&&
,优先于||
(Source)
因此
if (mObject != null && a || b )
相当于
if (((mObject != null) && a) || b )
要避免异常,请使用括号:
if (mObject != null && (a || b) )
答案 2 :(得分:2)
根据here,它是:
((( mObject != null ) && a ) || b )
所以你应该研究b,因为:
(null != null) is false
false && a is always false
一切都取决于b。
答案 3 :(得分:0)
如果未提供括号,则始终从equals表达式的左侧到右侧对其进行求值。