取消引用的变量可能为 null¶
ID: java/dereferenced-value-may-be-null
Kind: problem
Security severity:
Severity: warning
Precision: high
Tags:
- reliability
- correctness
- exceptions
- external/cwe/cwe-476
- non-local
Query suites:
- java-security-and-quality.qls
如果取消引用变量,并且该变量在导致取消引用的某些执行路径上可能具有 null
值,则取消引用可能会导致 NullPointerException
。
如果变量的类型是装箱基本类型,并且变量出现在发生隐式拆箱的上下文中,则也可以隐式取消引用该变量。请注意,当其中一个操作数是基本类型而另一个操作数是相应装箱类型时,条件运算符会拆箱其第二个和第三个操作数。
建议¶
确保变量在取消引用时不具有 null
值。
示例¶
在以下示例中,由于整数文字的类型为 int
,因此使用条件运算符会导致隐式拆箱。如果参数 p
曾经为 null
,则会发生 NullPointerException
。
public Integer f(Integer p) {
return true ? p : 5;
}
如果隐式拆箱不是故意的,可以通过确保条件运算符的两个分支具有相同的类型来防止它。