Выбор ответа Junior Задачи на Kotlin обновлено

Сравнение Long с литералом

Вопрос

Почему не компилируется val sum: Long = 0; if (sum == 0) println("zero")?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: == между Long и Int запрещён: нужно 0L. В Kotlin нет неявного расширения чисел, и == между Long и Int запрещён компилятором.

Варианты ответа

  1. Long нельзя сравнивать через ==, только compareTo
  2. Переменная sum должна быть var, а не val
  3. == между Long и Int запрещён: нужно 0Lправильный ответ
  4. Нужно писать sum.equals(0), == не работает

Разбор

В Kotlin нет неявного расширения чисел, и == между Long и Int запрещён компилятором. Литерал нужно сделать Long: 0L. Объявление val sum: Long = 0 при этом законно, литерал сразу получает тип Long. sum.equals(0) скомпилируется, но вернёт false, потому что Long и Integer разные классы.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.