Kotlin имеет null-safety, что позволяет явно указывать, может ли переменная содержать null. В Java все ссылочные типы по умолчанию могут быть null.
Kotlin поддерживает расширения функций и свойств, что позволяет добавлять новые возможности к существующим классам без наследования или использования паттерна Decorator.
Kotlin имеет классы данных (data class), которые автоматически генерируют методы equals(), hashCode(), toString(), copy() и компоненты деструктуризации.
Kotlin поддерживает ковариантность и контравариантность в обобщениях с использованием ключевых слов out и in. В Java это делается с помощью wildcards (? extends T, ? super T).
Kotlin имеет умное приведение типов (smart casts), которое автоматически приводит тип переменной после проверки условием (if (x is String)).
Kotlin поддерживает функции высшего порядка и лямбда-выражения, что упрощает функциональное программирование.
Kotlin использует синтаксис для создания экземпляров объектов без ключевого слова new.
Kotlin имеет отличия в примитивных типах: они не являются отдельными классами, а представляют собой встроенные в язык типы, которые компилируются в примитивы Java при необходимости.
| Особенность | Kotlin | Java |
|---|---|---|
| Null-safety | Встроено в систему типов | Используется @Nullable |
| Расширения | Поддерживаются | Нет |
| Классы данных | data class | Генерируются вручную/IDE |
| Ковариантность/Контравариантность | out, in | Wildcards (? extends, ? super) |
| Умное приведение типов | Автоматическое после проверки | Требует явного приведения |
| Функции | Высшего порядка, лямбда | Анонимные/лямбда-выражения (с Java 8) |
| Создание объектов | Без new | С new |
| Примитивные типы | Встроенные, компилируются в Java примитивы | Отдельные типы (int, float и т.д.) |