Java 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();

我已经编写了一个方法来检查我的字符串是否在文件中,但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)
部分是警告的来源。为什么? 如果找不到任何匹配的结果(并且后续输出都为空),
返回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;
            }
        }