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