Вопрос №627 от пользователя Dmitry Skurikhin в уроке «Модуль 6. Урок 1. Составные строки в Java.», курс «Введение в Java»

Dmitry Skurikhin

В task4 пытался сделать такой if: if (left.equals(right)) он не сработал. в итоге пришлось создавать сначала отдельный String для left и right при помощи метода toString(), а затем только эта конструкция заработала.

Почему так? когда я применяю equals java не понимает, что надо toString сделать?

2 0

Вячеслав Ковалевский

Дело в том что в StringBuilder метод equals проверяет не содержимое строк а только то что обе ссылки указываю на один и тот же объект класса в памяти. Т.е. строки в двух StringBuilder инстансах могут быть одинаковыми но при этом equals вернет false. Именно по этому вначале нужно приводить StringBuilder to String и после уже сравнивать строки (где equals метод работает как и ожидается).

Данное тестовое задание и направлено на то что бы Вы выявили эту интересную особенность и обратили на нее внимание, так как подобное поведение метода equals обычно является источником ошибок в коде. Так что Вы теперь благополучно сможете подобных ошибок избегать на своих проектах.

1

Базыль Яськевіч

На самом деле, в постановке задачи присутствует некоторая неоднозначность метод должен сравнить два экземпляра StringBuilder и вернуть true в том случае если оба экземпляра класса содержит **одну и ту же строку**, в противно случае метод должен вернуть false что подразумевается под "одной и той же строкой"? Если подходить строго, строки с одинаковым набором символов, но занимающие разные области памяти, - это не "одна и та же строка". Равно как: два рыжих близнеца - это один и тот же человек?

0

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
25 мая 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
25 мая 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
25 мая 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
25 мая 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
25 мая 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
25 мая 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
25 мая 5 месяцев