java - if 语句中的 SonarQube Java 'NullPointerException might be thrown'

标签 java if-statement nullpointerexception sonarqube

我从 SolarQube = "收到一种以下错误 可能会抛出 NullPointerException,因为“a”在这里可为空”。下面是该错误的简单代码示例。

类(class):

class A {
int a1;
int a2;

public A () {
}

public int getA1() {
    return a1;
}

public int getA2() {
    return a2;
}
}

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

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

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

最佳答案

想想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,您必须编写的内容是对需要的两个 boolean 表达式的求值进行分组。
您可以通过用括号将它们括起来来做到这一点:

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

关于java - if 语句中的 SonarQube Java 'NullPointerException might be thrown',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51242687/

相关文章:

Java Object.wait(long, long) 实现与文档不同

java - 单击基于表中另一列的链接文本的链接

java - 从Java抽象类继承后访问属性

java - 如何在一个类中做一个方法,在另一个类中操作变量?

php - JQuery $.post & php 'if' 语句停止工作

python - 其他语句无效的语法

BASH:if 语句执行命令和函数

java - 什么是NullPointerException,我该如何解决?

java - 无法理解 Arrays.sort() 功能

java - 如何比较两个可能为空的对象?