Не понимаю, как возможно присваивание к переменной string key значения типа boolean, так как equals() возвращает булеан
vonger
51 уровень
Как работает конструкция !(key = reader.readLine()).equals("")
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Molly
23 июля 2023, 13:59
Дело в том, что в key присваивается результат работы reader.readLine(), а equals("") уже сравнивает значение в key с пустой строкой и возвращает boolean, который ты инвертируешь на противоположное значение при помощи "!". То есть, в key заносится readLine(), а equals() уже работает со значением key.
0
Molly
23 июля 2023, 14:12
Если ещё точнее, то результат работы equals() в данном примере никуда не присваивается. К примеру, результат можно было бы сохранить в какую-то переменную:
Но твой пример из конструкции while, значит он и забирает себе результат работы equals()
0
vonger QA Automation Engineer
23 июля 2023, 14:55
Это скорее всего так, но звучит не логично и непонятно. То есть выполняется сначала метод readLine(), затем присваивание, после equals(). Как будто логичнее, если выполнится сначала методы readLine(), equals(), а после уже присваивание. Присваивание в скобках единственный оператор, то есть его приоритет самый высокий и он должен выполнится после выполнения методов справа от присваивания
Есть какая-нибудь статья на эту тему?
0
Molly
23 июля 2023, 15:26решение
Вся суть в скобках. Эти скобки выставляют приоритет операций. В данной ситуации они говорят, что сначала выполняется действие, заключенное в них. Далее, к результату этого действия будет применен метод .equals(). Вот если бы этих скобок не было, тогда да, в переменную key программа попыталась бы назначить значение типа boolean. Пример:
![]()

+3