[JDK/JRE 8、Windows 8.1 64 位]
所以我有一个类似这样的代码:
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")) {
。
为什么会出现这种情况?
我怀疑您只是遇到了所使用的静态分析的限制。 警告消息确实说“潜在”。 在这种情况下,可能是因为条件
(s = reader.readLine()) != null
很难完全传播。
像这样的静态分析通常是启发式的,可能并不总是完全符合您的预期。 它们作为提示很有用,但并非绝对正确。
您可以安全地忽略它(前提是代码实际上按您的预期工作!),或者添加注释来抑制该警告。