des*_*sta 0 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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个方法,使用上面的类作为参数:
public boolean testMethod(A a) {
if(a != null && a.getA1() != 1 || a.getA2() != 2) {
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我收到了a.getA2 != 2SonarQube突出显示的错误.我只是无法理解这些陈述的问题.SonarQube描述的bug描述并没有让我更清楚.我该如何修复它,任何人都可以向我解释为什么这是一个错误?
考虑运营商的优先级:&&优先级高于||.
优先级较高的运算符在优先级相对较低的运算符之前进行求值.
所以你必须理解这个陈述:
if(a != null && a.getA1() != 1 || a.getA2() != 2)
Run Code Online (Sandbox Code Playgroud)
无论是否写得:
// Evaluated together // Evaluated then
if( (a != null && a.getA1() != 1) || a.getA2() != 2)
Run Code Online (Sandbox Code Playgroud)
所以a.getA2() != 2没有null检查.
您必须编写的要防止的内容NullPointerException是对需要的两个布尔表达式的求值进行分组.
你可以用括号围绕它们来做到这一点:
if(a != null && (a.getA1() != 1 || a.getA2() != 2))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
799 次 |
| 最近记录: |