Да, мы все делали это изначально, особенно во время учебы в школе / колледже, когда мы начали изучать информатику и языки программирования, такие как C # и Java. Привычка сравнивать объекты (особенно строки) с помощью оператора == является обычным явлением и даже сегодня используется опытными разработчиками.

В их защиту: кажется, что это действительно служит цели и, похоже, в этом нет особого вреда. Это верно до тех пор, пока вы не столкнетесь с некоторыми странными ситуациями, одну из которых я вам сейчас покажу.

Вот общая причина, по которой не следует использовать == (согласно Sonar: инструмент непрерывного контроля)

«Использование операторов равенства (==) и неравенства (! =) Для сравнения двух объектов не проверяет, имеют ли они одинаковые значения. Вместо этого он проверяет, указывают ли обе ссылки на один и тот же объект в памяти. В большинстве случаев это не то, чем вы хотите заниматься. "

Несмотря на то, что приведенное выше предложение имеет смысл, оно по-прежнему недостаточно беспокоит нас, чтобы изменить способ кодирования, до тех пор, пока не изменится ожидаемый результат.

Однако в использовании метода Equals () есть скрытое преимущество, которое может избавить вас от многих проблем.

Рассмотрим сценарий, в котором вам нужно получить результаты экзамена учащегося, обратившись к внешнему API, и отобразить соответствующее сообщение для его родителей, когда они получат доступ к странице результатов.

По какой-то странной причине внешний API GetExamResult () возвращает строковое значение для обозначения результата. «Сдал», если студент сдал все экзамены, и «Не сдал», если нет.

Вот как будет выглядеть метод отображения результатов студента:

Здесь мы используем == для сравнения результата. В большинстве случаев это сработает.

Теперь предположим сценарий, в котором учащийся прошел, но вызов API дает сбой и возвращает нулевое значение.

В этом случае проверка == вернет false, что приведет к катастрофическим последствиям для этого ученика.

Если бы мы использовали здесь метод Equals (), он вернул бы исключение нулевого указателя вместо ввода блока else, что в идеале должно быть так.

Это вернет пользователю сообщение о повторной попытке, что уместно в этом случае.

В заключение, не травмируйте чьих-либо родителей. По возможности используйте Equals () вместо ==, если только вы не ожидаете и не обрабатываете значения NULL в своем коде заранее. Исходный код этого примера можно скачать здесь.