[英]Eclipse dead code warning, but what is wrong?
我已经编写了一种方法来检查我的字符串是否在文件中,但是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)
部分是警告的来源。 为什么? 如果找不到任何匹配的结果(并且即将输出均为null),则return false
。 我认为还可以。 怎么了?
还有一个问题。 哪个更好用?
String s;
while(true){
s="New Value";
....
}
要么
while(true){
String s="new value";
...
}
我认为垃圾收集器会消耗系统资源,因此第一个更好。 但是,我在第二个例子中看到了更多示例。 您会使用哪一个?
查看整个if / else:
if (s.equals(key)) {
...
} else if (s == null) {
...
}
如果s
为 null,则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条件内分配值。
如果s
为null,则将执行第一个if
并将抛出NullPointerException。 您的else if
无法执行。 您必须切换if
和else if
才能正确处理空指针。
回答很简单:如果s将为null,则在此行
s.equals(key)
NullPointerException将被抛出,并且programm将永远不会丰富此内容
else if (s == null)
条件。 仅当s!= null时,programm才会丰富此条件。 因此,这种情况总是错误的 。 您最好用以下方式重写此代码段:
while (true) {
String s = fileReader.readLine();
if (s == null) {
fileReader.close();
return false;
} else if (s.equals(key)) {
fileReader.close();
return true;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.