Sim*_*yer 4 java logical-operators
我只是调试一些代码并找到一些表达式:
if (mObject != null && a || b )
{
mObject.someMethod();
}
Run Code Online (Sandbox Code Playgroud)
在mObject.someMethod()行中有一个NullPointerException - 所以我的问题是:
表达式是如何评估的?
1. a && b || c == a && (b || c)
Run Code Online (Sandbox Code Playgroud)
要么
2. a && b || c == (a && b) || c
Run Code Online (Sandbox Code Playgroud)
如果是1.这种情况我可能不得不看一些多线程问题.
这可能是一个愚蠢的问题,我很确定它之前已被问过,但我在这里找不到答案.感谢您提前的答案.
它相当于以下条件:
if ((mObject != null && a) || b )
Run Code Online (Sandbox Code Playgroud)
&&有更高的优先权||.
如果mObject为null,则条件可以通过,如果b为true.
!=优先于哪个优先于&&哪个优先于||(来源)
所以
if (mObject != null && a || b )
Run Code Online (Sandbox Code Playgroud)
相当于
if (((mObject != null) && a) || b )
Run Code Online (Sandbox Code Playgroud)
为了避免异常,请使用括号:
if (mObject != null && (a || b) )
Run Code Online (Sandbox Code Playgroud)