我已经编写了一个方法来检查我的字符串是否在文件中,但是eclipse会给出死代码警告。这是我的方法:
private boolean KeyPresent(String key){
try{
BufferedReader fileReader=new BufferedReader(new FileReader(keyPath));
while(true){
String s=fileReader.readLine();
if(s.equals(key)){
fileReader.close();
return true;
}else if(s==null){
fileReader.close();
return false;
}
}
}catch(IOException e){
e.getStackTrace()
return false;
}
}
else if(s==null)
部分是警告的来源。为什么?
如果您找不到任何匹配的结果(并且即将出现的输出都为空),return false
。我觉得没关系。有什么问题?
还有一个问题。哪个更好用?
String s;
while(true){
s="New Value";
....
}
或
while(true){
String s="new value";
...
}
我认为垃圾收集器消耗系统资源,所以第一个更好。但是,我在第二个看到了更多的例子。你会用哪一个?
答案 0 :(得分:7)
看看整个if / else:
if (s.equals(key)) {
...
} else if (s == null) {
...
}
如果s
为空,则s.equals(key)
会抛出NullPointerException
- 因此您永远不会进入第二个if
块
你应该使用try-with-resources块,我个人也不会抓住IOException
......只是让它冒泡:
private boolean keyPresent(String key) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(keyPath))) {
String line;
while ((line = reader.readLine()) != null) {
if (line.equals(key)) {
return true;
}
}
return false;
}
}
请注意,此处没有垃圾收集差异;在循环之前声明变量只意味着您可以在while条件中分配值。
答案 1 :(得分:1)
如果s
为null,则将执行第一个if
并抛出NullPointerException。您的else if
无法执行。您必须切换if
和else if
才能正确处理空指针。
答案 2 :(得分:1)
回答很简单: 如果s将为null,那么在这一行
jsp
将抛出NullPointerException,并且programm永远不会丰富这个
s.equals(key)
条件。并且只有当s!= null时,programm才会丰富这个条件;所以这个条件总是 false 。 你最好用这种方式重写这个片段:
else if (s == null)