Eclipse死代码警告,但有什么不对?

时间:2016-07-25 20:38:06

标签: java eclipse

我已经编写了一个方法来检查我的字符串是否在文件中,但是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";
    ...
}

我认为垃圾收集器消耗系统资源,所以第一个更好。但是,我在第二个看到了更多的例子。你会用哪一个?

3 个答案:

答案 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无法执行。您必须切换ifelse if才能正确处理空指针。

答案 2 :(得分:1)

回答很简单: 如果s将为null,那么在这一行

jsp

将抛出NullPointerException,并且programm永远不会丰富这个

s.equals(key)

条件。并且只有当s!= null时,programm才会丰富这个条件;所以这个条件总是 false 。 你最好用这种方式重写这个片段:

else if (s == null)