Java Eclipse死代码警告,但出了什么问题?
我已经编写了一个方法来检查我的字符串是否在文件中,但eclipse给出了死代码警告。以下是我的方法:Java Eclipse死代码警告,但出了什么问题?,java,eclipse,Java,Eclipse,我已经编写了一个方法来检查我的字符串是否在文件中,但eclipse给出了死代码警告。以下是我的方法: private boolean KeyPresent(String key){ try{ BufferedReader fileReader=new BufferedReader(new FileReader(keyPath)); while(true){ String s=fileReader.readLine();
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)
部分是警告的来源。为什么?
如果找不到任何匹配的结果(并且后续输出都为空),返回false
。我想没关系。怎么了
还有一个问题。哪个更好用
String s;
while(true){
s="New Value";
....
}
或
我认为垃圾收集器会消耗系统资源,所以第一个更好。然而,我在第二个例子中看到了更多的例子。你会用哪一个?看看整个if/else:
if (s.equals(key)) {
...
} else if (s == null) {
...
}
如果
s
为null,则s.equals(key)
将抛出NullPointerException
-因此,如果块,您将永远不会进入第二个
无论如何,您应该使用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。如果
无法执行,请执行您的。您必须切换if
和else if
以正确处理空指针。答案很简单:
如果s将被null替换,那么在这一行中
s.equals(key)
将抛出NullPointerException,并且程序将永远不会对此进行丰富
else if (s == null)
条件。只有当s!=无效的因此,此条件将始终为假。
您最好以以下方式重写此代码段:
while (true) {
String s = fileReader.readLine();
if (s == null) {
fileReader.close();
return false;
} else if (s.equals(key)) {
fileReader.close();
return true;
}
}
while (true) {
String s = fileReader.readLine();
if (s == null) {
fileReader.close();
return false;
} else if (s.equals(key)) {
fileReader.close();
return true;
}
}