Dereference before null check,空检查前间接引用。通俗一点就是一个可能为空的变量, 先使用了, 后面又进行非空判断。
Coverity 扫描的错误信息是:
Dereference before null check (REVERSE_INULL)
There may be a null pointer exception, or else the comparison against null is unnecessary.
翻译一下:
空检查前间接引用 (反向无效)
可能存在空指针异常,或者不需要与 null 进行比较。
示例
看示例代码:
public String reverseInull3(String userName) {
String rtnStr = "";
String userName2 = userName.substring(1);
if(userName != null) { // 提升有弱点
rtnStr += userName2;
}
return rtnStr;
}
上面的代码中:
- userName 在没有判空前调用substring() 方法进行截取, 并且把结果赋给userName2 ,但是接下来又对userName 进行判空。 在判空代码处就会提示。也就是说: 这个判空其实没有什么作用,这个判空已经晚了,或者不需要。
但是如果上面的userName 被赋值了,则不会提示, 如下代码:
public String reverseInull