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

225
27 марта 2022, 08:50

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

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

и в тоже время

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

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

Answer 1

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.

READ ALSO
PHP отправить PUT запрос

PHP отправить PUT запрос

Как через PHP CURL отправить данный запрос PUT

104
Поочередность SQL транзакций

Поочередность SQL транзакций

Использую MYSQLiЕсть такая проблема, при выполнении SQL транзакций иногда появляется ошибка: Deadlock found when trying to get lock; try restarting transaction

109
Php передача csv файла пользователю

Php передача csv файла пользователю

Мне нужно с базы данных сделать выборку и сформировать файл и предложить пользователю его сохранитьС базы данных возвращается двумерный...

212
Ошибка при запросе API Cloudflare. Почему?

Ошибка при запросе API Cloudflare. Почему?

когда я запускаю следующий код:

144