使用&&和||进行逻辑评估 在一份声明中

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.这种情况我可能不得不看一些多线程问题.

这可能是一个愚蠢的问题,我很确定它之前已被问过,但我在这里找不到答案.感谢您提前的答案.

man*_*uti 7

它相当于以下条件:

if ((mObject != null && a) || b )
Run Code Online (Sandbox Code Playgroud)

&&有更高的优先权||.

如果mObject为null,则条件可以通过,如果b为true.


Era*_*ran 4

!=优先于哪个优先于&&哪个优先于||来源

所以

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)