Eclipse dead code warning, but what is wrong?

I've written a method that checks if my string is in a file, but eclipse gives dead code warning. Here is my method:

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;
    }
}

The else if(s==null) part is the source of the warning. Why? If you can't find any matching result(and coming outputs are all null), return false. I think it is OK. What is wrong?

And one more question. Which is better to use?

String s;
while(true){
    s="New Value";
    ....
}

or

while(true){
    String s="new value";
    ...
}

I think garbage collectors consume system resources, so the first one is better. However, I see more examples on the second one. Which one would you use?

Thanks...

Jon Skeet
people
quotationmark

Look at the whole if/else:

if (s.equals(key)) {
    ...
} else if (s == null) {
    ...
}

If s is null, then s.equals(key) will have thrown a NullPointerException - so you'll never get into the second if block.

You should use a try-with-resources block anyway, and personally I wouldn't catch the IOException either... just let it bubble up:

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;
    }
}

Note that there's no garbage collection difference here; declaring the variable before the loop just means you can assign the value within the while condition.

people

See more on this question at Stackoverflow