Если equals для String, тогда почему == для null?

Известно, что ссылочные типы необходимо сравнивать с помощью equals. Есть нюансы, что для Integer в диапазоне от -128 до 127 сравнение происходит с помощью == и это отдельная история. Вопрос, почему

String line;
while(!(line = br.readLine()).equals("ESC")){}

и в тоже время

String line;
while((line = br.readLine()) != null){}

Почему с null сравниваем с помощью ==?


Ответы (1 шт):

Автор решения: Mikhail Ionkin

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.

→ Ссылка