SonarQube Java if语句中可能抛出“ NullPointerException”

时间:2018-07-09 09:54:19

标签: java if-statement nullpointerexception sonarqube

我从solarQube中得到了以下错误=“ NullPointerException可能会因为“ a”在此处为空而引发。”下面是该错误的简单代码示例。

课程:

class A {
int a1;
int a2;

public A () {
}

public int getA1() {
    return a1;
}

public int getA2() {
    return a2;
}
}

然后我有一个使用上面的类作为param的方法:

public boolean testMethod(A a) {
    if(a != null && a.getA1() != 1 || a.getA2() != 2) {
        return true;
    }
    return false;   
}

SonarQube突出显示了a.getA2 != 2的错误。我只是无法理解那些陈述的问题。 SonarQube所描述的错误的描述没有让我更清楚。我该如何解决它,任何人都可以向我解释为什么这是一个错误吗?

1 个答案:

答案 0 :(得分:6)

想到the operators precedence&&的优先级高于||
具有较高优先级的运算符将在具有相对较低优先级的运算符之前进行评估。

所以您必须了解以下声明:

if(a != null && a.getA1() != 1 || a.getA2() != 2)

是否写过:

        // Evaluated together       // Evaluated then
if( (a != null && a.getA1() != 1) || a.getA2() != 2)

所以a.getA2() != 2没有null支票。

为防止NullPointerException而必须写的内容被分组为对两个布尔表达式的求值。
您可以通过用括号将它们括起来来实现:

if(a != null && (a.getA1() != 1 || a.getA2() != 2))