NullPointerException в цикле while
Есть код, в котором в цикле падает ошибка NullPointerException вот в этом месте:
while (!((line = reader.readLine()).equals(null)))
Но если заменить его, допустим, на:
while ((line = reader.readLine()) != null)
То всё работает. Подскажите, пожалуйста, в чём дело?
public class Solution {
public static List<String> lines = new ArrayList<>();
static {
try {
BufferedReader reader = new BufferedReader(new FileReader(Statics.FILE_NAME));
String line;
while (!((line = reader.readLine()).equals(null))) {
lines.add(line);
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println(lines);
}
}
Ответы (2 шт):
Вызывать нестатический метод (в данном случае equals) можно только у существующего объекта. Если ссылка (в данном случае line) указывает на null, то при попытке вызвать через неё метод получается NPE.
Опретор != просто проверяет указывает ли ссылка на null, не пытаясь обращаться ни к каким методам. Поэтому и исключения не генерируется.
Дважды бессмысленная команда:
null.equals(null)
Метод equals можно выполнить только на объекте (!!), а не на null вместо него. Далее передача в него параметра null опять не имеет смысла, т. к. метод уже вызван.