NP:保证取消引用空值(NP_GUARANTEED_DEREF)
有一个声明或分支,如果执行保证a 此时value为null,并且该值保证为 dereferenced(涉及运行时异常的前向路径除外)。
请注意,if(x == null)之类的检查会抛出新的 空指针异常();被视为x的解除引用。
是什么意思,除了涉及运行时异常的转发路径?
同样为什么像if (x == null) throw new
NullPointerException();
之类的支票会发出警告?
答案 0 :(得分:3)
考虑这个可怕的人为代码:
String value = null;
if (5 > 8) {
value = "foo";
}
doSomething();
if (value.equals("foo")) {
System.out.println("value is foo");
}
静态分析可以证明value
在调用null
时将equals
,导致NullPointerException
被抛出。但是,如果对doSomething()
的调用导致抛出运行时异常,则永远不会调用equals
。这是“除了涉及运行时异常的前向路径之外”的含义。
关于您的第二个问题,FindBugs会发出此代码的警告
if (value == null) {
throw new NullPointerException();
}
因为效果与取消引用null
值时的效果相同。由于取消引用值得警告,因此任何模仿该取消引用的代码也是如此。