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

时间:2015-01-28 12:03:03

标签: java logical-operators

我只是调试一些代码并找到了一些表达式:

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.我可能需要查看一些多线程问题。

这可能是一个愚蠢的问题,我很确定之前曾被问过,但我在这里找不到答案。谢谢你的答案。

4 个答案:

答案 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表达式的左侧到右侧对其进行求值。