gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:46:22 25 4
gpt4 key购买 nike

我从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com