Известно, что ссылочные типы необходимо сравнивать с помощью equals. Есть нюансы, что для Integer в диапазоне от -128 до 127 сравнение происходит с помощью == и это отдельная история. Вопрос, почему
String line;
while(!(line = br.readLine()).equals("ESC")){}
и в тоже время
String line;
while((line = br.readLine()) != null){}
Почему с null сравниваем с помощью ==?
Java берет начало из C++, тот -- из C. В Java null остался ссылкой на пустое значение.
В C же по стандарту любые два объекта, указывающие на null, равны.
Источник: ISO/IEC 9899 параграф 6.3.2.3, пункт 4.
... Any two null pointers shall compare equal.
Кроме того, у null нет метода (функции) equals, т.е. код ниже приведет к исключению:
((String)null).equals(null)
Почему у null нет функций? Ссылка опять к языку C.
Продвижение своими сайтами как стратегия роста и независимости