解除引用的变量始终为 null¶
ID: java/dereferenced-value-is-always-null
Kind: problem
Security severity:
Severity: error
Precision: very-high
Tags:
- reliability
- correctness
- exceptions
- external/cwe/cwe-476
Query suites:
- java-security-and-quality.qls
如果解除变量的引用,并且该变量在导致解除引用的所有可能的执行路径上具有 null
值,则解除引用必定会导致 NullPointerException
。
如果变量的类型是装箱基本类型,并且变量出现在发生隐式拆箱的上下文中,则该变量也可能会被隐式解除引用。请注意,条件运算符在其第二个和第三个操作数之一为基本类型而另一个为相应装箱类型时,会拆箱其第二个和第三个操作数。
建议¶
确保在解除变量引用时,该变量没有 null
值。
示例¶
在以下示例中,条件 !dir.exists()
仅在 dir
为 null
时才执行。第二个示例通过使用 &&
而不是 ||
来正确保护表达式。
public void createDir(File dir) {
if (dir != null || !dir.exists()) // BAD
dir.mkdir();
}
public void createDir(File dir) {
if (dir != null && !dir.exists()) // GOOD
dir.mkdir();
}