В чем разница Kotlin и Java
Что проверяют
Отвечаете ли вы по существу или списком «Kotlin короче». Ждут понимания, что даёт язык на уровне гарантий, а не синтаксического сахара.
Как отвечать
Начните с главного различия: система типов Kotlin различает допускающие и не допускающие null типы, и это проверяется компилятором. Большая часть ошибок с нулевыми ссылками ловится до запуска, тогда как в Java для этого нужны аннотации и дисциплина.
Дальше по существенным пунктам:
- лаконичность с гарантиями:
data classдаётequals,hashCode,toStringи копирование; свойства вместо пары геттер и сеттер; вывод типов; - неизменяемость по умолчанию в стиле языка:
valпротивvar, разделениеListиMutableListна уровне интерфейсов; - функции высшего порядка и расширения: методы можно добавлять к чужим типам, лямбды встраиваются компилятором, отсюда цепочки обработки коллекций без накладных расходов;
- корутины: асинхронный код пишется последовательно, без цепочек колбэков. В Java аналог появился в виде виртуальных потоков, но модель другая;
when, деструктуризация, запечатанные классы: моделирование состояний получается компактным и проверяемым на полноту;- полная совместимость: общий байт-код, вызов Java из Kotlin и обратно, миграция по файлам.
Честно назовите и обратную сторону: время сборки выше, стектрейсы корутин читаются хуже, а платформенные типы из Java возвращают null туда, где компилятор его не ждал.
Где спотыкаются
Сводят ответ к «меньше кода», не упоминая безопасность по null.
Говорят, что Kotlin убирает NullPointerException полностью. На границе с Java он возможен.
Забывают, что в Java давно есть лямбды, записи и виртуальные потоки, и сравнивают с версией десятилетней давности.