[JDK / JRE 8,Windows 8.1 64-Bit]
所以我的代码有点像这样:
File file = ...;
BufferedReader reader = ...;
String s;
while ((s = reader.readLine()) != null) {
s = s.replace("10", "100");
if (s.startsWith("100100")) {
...
}
}
直到那里,一切正常。
但是,如果我给出任何条件来执行String.replace
,例如:
File file = ...;
BufferedReader reader = ...;
String s;
while ((s = reader.readLine()) != null) {
if (file.getName().startsWith("X_")) {
s = s.replace("10", "100");
}
if (s.startsWith("100100")) {
...
}
}
然后,编译器在Potential null pointer access: The variable s may be null at this location
给我一个警告if (s.startsWith("100100")) {
。
为什么会这样?
答案 0 :(得分:2)
我怀疑你刚刚遇到静态分析的局限性。警告信息确实说“潜在”。在这种情况下,可能是因为条件(s = reader.readLine()) != null
很难完全传播。
像这样的静态分析通常是启发式的,可能并不总是完全符合您的预期。它们作为提示非常有用,但它们并非绝对可靠。
您可以放心地忽略它(假设代码实际上按照您的意图工作!),或者可能添加注释来抑制该警告。