Java 为什么源代码分析器在检查null的情况下仍然可以抛出NullPointerException

Java 为什么源代码分析器在检查null的情况下仍然可以抛出NullPointerException,java,nullpointerexception,Java,Nullpointerexception,我正在看一些我刚刚继承并通过源代码分析器运行的代码。它指出我在这里面临NullPointerException的风险: if(!(strLineData == null) && !(strLineData.isEmpty())) 虽然这显然是一种愚蠢的测试字符串的方法(而且到处都是这样做的!),但为什么要抛出NullPointerException呢?如果strLineData为null,它将不会计算If语句的后半部分,对吗?您是对的。该工具似乎有可能被窃听,原因如下: 条件a

我正在看一些我刚刚继承并通过源代码分析器运行的代码。它指出我在这里面临NullPointerException的风险:

if(!(strLineData == null) && !(strLineData.isEmpty()))

虽然这显然是一种愚蠢的测试字符串的方法(而且到处都是这样做的!),但为什么要抛出NullPointerException呢?如果strLineData为null,它将不会计算If语句的后半部分,对吗?

您是对的。该工具似乎有可能被窃听,原因如下:

条件and运算符&&与&(§15.22.2)类似,但仅当其左侧操作数的值为真时才计算其右侧操作数


但如果strLineData为null,则“!”会使左侧为false。对吗???也许工具没有考虑短路?试着简化语句,例如,
if(strLineData!=null&&!strLineData.isEmpty())
看看你的分析器是怎么说的。哪个源代码分析器?@radoh正是这样。显然,冗余括号等使分析仪的能力明显受限。谢谢!我知道我没有疯。:-)