| Категория | Java | Kotlin |
|---|---|---|
| Общее позиционирование | Классический строго типизированный язык для JVM (и Android). Основа корпоративной разработки, стабильный, зрелый, но многословный. | Современный статически типизированный язык от JetBrains, полностью совместимый с Java. Более лаконичный, безопасный и “умный”. |
| Парадигма | Объектно-ориентированный + функциональный (через Stream API). | Полностью мультипарадигменный: ООП, функциональный, декларативный. |
| Пример “Hello World” |
public class App { public static void main(String[] args){ System.out.println("Hello, World"); } }
|
fun main() { println("Hello, World") }
|
| Компиляция / выполнение | Компилируется в байткод JVM или GraalVM native. | Компилируется в тот же байткод JVM (или в JS/Native). Полностью бинарно совместим с Java. |
| Типизация |
Статическая, строгая, но с nullable типами (null может вызвать NPE).
|
Статическая, строгая, но с безопасностью null (String? / String). Компилятор предотвращает NPE.
|
| Среда выполнения | JVM, Android Runtime. | JVM, Android, JS (через Kotlin/JS), Native (через Kotlin/Native). |
| Совместимость |
Java-код → Kotlin без проблем. Kotlin-код → доступен Java (через аннотации @JvmName, @JvmStatic).
|
Полностью совместим с Java. Может использовать Java библиотеки, классы и фреймворки. |
| Объявление переменных |
int x = 10; final int y = 5;
|
var x = 10 // изменяемаяval y = 5 // неизменяемая
|
| Типы данных |
Примитивы (int, double, boolean, char) и ссылочные типы.
|
Только объектные типы, но компилятор оптимизирует до примитивов. Null-безопасность встроена. |
| ООП-модель | Классы, интерфейсы, наследование, абстрактные классы. |
То же, но с лаконичным синтаксисом. data class, sealed class, object (синглтон).
|
| Инкапсуляция |
public, private, protected, default.
|
public, private, protected, internal (видно в модуле).
|
| Наследование |
Классы по умолчанию final. Для наследования — extends.
|
Все классы final по умолчанию, для наследования — open.
|
| Пример класса |
class User { private String name; }
|
class User(var name: String)
|
| Конструкторы |
public User(String name){ this.name = name; }
|
class User(val name: String) — первичный конструктор в объявлении.
|
| Свойства и геттеры |
Явные get()/set() методы.
|
Автоматические свойства (var name → имеет get/set по умолчанию).
|
| Null-безопасность |
Есть NullPointerException.
|
Типы ?: val name: String? = null. Компилятор требует проверку перед использованием.
|
| Elvis-оператор | Нет. |
Есть: val len = name?.length ?: 0 — аналог if (name != null) name.length else 0.
|
| Smart Casts | Нет (нужно явно кастовать). |
Есть: после проверки if (obj is String) → внутри блока obj уже String.
|
| Функции |
int add(int a, int b){ return a + b; }
|
fun add(a: Int, b: Int) = a + b (автоматический вывод типа и сокращённая форма).
|
| Функции как значения | Через интерфейсы (Runnable, Function). |
Полноценные функции высшего порядка и лямбды (list.map { it * 2 }).
|
| Extension-функции | Только через наследование или утилиты. |
Да: можно добавить метод к любому классу без наследования (fun String.lastChar() = this[this.length - 1]).
|
| Data-классы |
Нужно писать вручную equals, hashCode, toString.
|
data class User(val name: String) — всё создаётся автоматически.
|
| Sealed-классы | Через enum или наследование. |
Есть sealed class — ограниченные иерархии для безопасных switch-like конструкций.
|
| Enums |
Да (enum Color { RED, GREEN, BLUE }).
|
Да, с расширением (enum class Color(val rgb: Int)), можно добавлять свойства и методы.
|
| Лямбды |
С Java 8 (x -> x + 1).
|
Встроены изначально ({ x -> x + 1 }), плюс trailing lambda синтаксис.
|
| Stream API / коллекции |
Stream API (list.stream().map(...)).
|
Коллекции Kotlin — расширения map, filter, fold, ленивые последовательности (sequence {}).
|
| Пример |
list.stream().filter(x -> x>0).collect(...)
|
list.filter { it > 0 }.map { it * 2 }
|
| Обработка ошибок |
Исключения (try/catch/finally), checked и unchecked.
|
Исключения есть, но checked исключений нет (всё unchecked). |
| Асинхронность |
Thread, ExecutorService, CompletableFuture.
|
Coroutines (suspend fun, launch, async): лёгкие кооперативные потоки с безопасной отменой.
|
| Пример coroutine | — |
GlobalScope.launch { val data = async { getData() }; println(data.await()) }
|
| Фреймворки (backend) | Spring Boot, Quarkus, Micronaut. | Ktor (JetBrains), Spring Boot (через Kotlin DSL), Micronaut, Javalin, Exposed ORM. |
| Фреймворки (frontend / mobile) | JavaFX, Android SDK. | Jetpack Compose (Android), Kotlin Multiplatform Mobile (KMM), Compose for Desktop, Kotlin/JS. |
| ORM и БД | Hibernate, JPA. | Exposed, Ktorm, Spring Data Kotlin, JPA через Kotlin. |
| Тестирование | JUnit 5, Mockito, TestNG. | JUnit 5 + Kotest, MockK (аналог Mockito, но Kotlin-style). |
| Документация |
Javadoc (/** ... */).
|
KDoc (/** ... */, Markdown, интеграция с IntelliJ).
|
| Логирование | SLF4J, Logback, Log4j. | Те же библиотеки (совместимо). |
| Функциональные элементы | Stream API, lambda, Optional. |
Полноценная FP: map, flatMap, fold, run, let, apply, also, takeIf, takeUnless.
|
| Инструменты сборки | Maven, Gradle. | Gradle Kotlin DSL (нативная поддержка Kotlin). |
| Ассерты / тесты |
assertEquals(a,b) (JUnit).
|
a shouldBe b (Kotest), DSL-тесты.
|
| Паттерн matching / switch |
switch-case.
|
when (универсальный и мощный аналог, возвращает значение).
|
Пример when
|
— |
val msg = when(x){ 1 -> "One" 2 -> "Two" else -> "Other" }
|
| Сборка / CI | Jenkins, Maven, GitLab CI. | Jenkins, Gradle, GitHub Actions, Kotlin DSL CI pipelines. |
| Документирование API | Swagger/OpenAPI. | Swagger через Ktor, Springdoc, или KDoc автогенерация. |
| Фронтенд / UI | JavaFX, JSP. | Jetpack Compose, Compose Multiplatform, Kotlin/JS + React. |
| Android-разработка | Основной язык до 2019. | Официальный язык Android с 2019 года (Google). Полная поддержка Jetpack, Kotlin DSL, coroutines. |
| Сборка Android | XML + Activity. | Jetpack Compose (UI = код), меньше шаблонов и XML. |
| Интероперабельность с Java | 100% двухсторонняя. | 100% двухсторонняя, но Kotlin имеет больше синтаксического сахара. |
| Типичные области применения | Корпоративный backend, Android, микросервисы. | Android, backend (Spring, Ktor), multiplatform, DSL, data pipelines. |
| Производительность | Сопоставима с Kotlin (JVM одинаков). | Равная Java (тот же байткод JVM). Kotlin/Native — чуть медленнее нативных языков. |
| Преимущества | Надёжность, зрелость, предсказуемость. | Короткий, выразительный синтаксис, null-безопасность, корутины, современный дизайн. |
| Недостатки | Многословие, verbosity, checked exceptions. | Медленнее компиляция, сложнее дебаг, не вся Java API “коротко” оборачивается. |
| Философия языка | “Write once, run anywhere.” | “Make code safe, concise, and expressive.” |
| Крупные проекты | LinkedIn, Netflix, Amazon, Android SDK. | Jetpack, Android Studio, Gradle Kotlin DSL, Ktor, Pinterest, Coursera. |
| Категория | Java | Kotlin |
|---|---|---|
| Общее позиционирование | Классический строго типизированный язык для JVM (и Android). Основа корпоративной разработки, стабильный, зрелый, но многословный. | Современный статически типизированный язык от JetBrains, полностью совместимый с Java. Более лаконичный, безопасный и “умный”. |
| Парадигма | Объектно-ориентированный + функциональный (через Stream API). | Полностью мультипарадигменный: ООП, функциональный, декларативный. |
| Пример “Hello World” |
public class App { public static void main(String[] args){ System.out.println("Hello, World"); } }
|
fun main() { println("Hello, World") }
|
| Компиляция / выполнение | Компилируется в байткод JVM или GraalVM native. | Компилируется в тот же байткод JVM (или в JS/Native). Полностью бинарно совместим с Java. |
| Типизация |
Статическая, строгая, но с nullable типами (null может вызвать NPE).
|
Статическая, строгая, но с безопасностью null (String? / String). Компилятор предотвращает NPE.
|
| Среда выполнения | JVM, Android Runtime. | JVM, Android, JS (через Kotlin/JS), Native (через Kotlin/Native). |
| Совместимость |
Java-код → Kotlin без проблем. Kotlin-код → доступен Java (через аннотации @JvmName, @JvmStatic).
|
Полностью совместим с Java. Может использовать Java библиотеки, классы и фреймворки. |
| Объявление переменных |
int x = 10; final int y = 5;
|
var x = 10 // изменяемаяval y = 5 // неизменяемая
|
| Типы данных |
Примитивы (int, double, boolean, char) и ссылочные типы.
|
Только объектные типы, но компилятор оптимизирует до примитивов. Null-безопасность встроена. |
| ООП-модель | Классы, интерфейсы, наследование, абстрактные классы. |
То же, но с лаконичным синтаксисом. data class, sealed class, object (синглтон).
|
| Инкапсуляция |
public, private, protected, default.
|
public, private, protected, internal (видно в модуле).
|
| Наследование |
Классы по умолчанию final. Для наследования — extends.
|
Все классы final по умолчанию, для наследования — open.
|
| Пример класса |
class User { private String name; }
|
class User(var name: String)
|
| Конструкторы |
public User(String name){ this.name = name; }
|
class User(val name: String) — первичный конструктор в объявлении.
|
| Свойства и геттеры |
Явные get()/set() методы.
|
Автоматические свойства (var name → имеет get/set по умолчанию).
|
| Null-безопасность |
Есть NullPointerException.
|
Типы ?: val name: String? = null. Компилятор требует проверку перед использованием.
|
| Elvis-оператор | Нет. |
Есть: val len = name?.length ?: 0 — аналог if (name != null) name.length else 0.
|
| Smart Casts | Нет (нужно явно кастовать). |
Есть: после проверки if (obj is String) → внутри блока obj уже String.
|
| Функции |
int add(int a, int b){ return a + b; }
|
fun add(a: Int, b: Int) = a + b (автоматический вывод типа и сокращённая форма).
|
| Функции как значения | Через интерфейсы (Runnable, Function). |
Полноценные функции высшего порядка и лямбды (list.map { it * 2 }).
|
| Extension-функции | Только через наследование или утилиты. |
Да: можно добавить метод к любому классу без наследования (fun String.lastChar() = this[this.length - 1]).
|
| Data-классы |
Нужно писать вручную equals, hashCode, toString.
|
data class User(val name: String) — всё создаётся автоматически.
|
| Sealed-классы | Через enum или наследование. |
Есть sealed class — ограниченные иерархии для безопасных switch-like конструкций.
|
| Enums |
Да (enum Color { RED, GREEN, BLUE }).
|
Да, с расширением (enum class Color(val rgb: Int)), можно добавлять свойства и методы.
|
| Лямбды |
С Java 8 (x -> x + 1).
|
Встроены изначально ({ x -> x + 1 }), плюс trailing lambda синтаксис.
|
| Stream API / коллекции |
Stream API (list.stream().map(...)).
|
Коллекции Kotlin — расширения map, filter, fold, ленивые последовательности (sequence {}).
|
| Пример |
list.stream().filter(x -> x>0).collect(...)
|
list.filter { it > 0 }.map { it * 2 }
|
| Обработка ошибок |
Исключения (try/catch/finally), checked и unchecked.
|
Исключения есть, но checked исключений нет (всё unchecked). |
| Асинхронность |
Thread, ExecutorService, CompletableFuture.
|
Coroutines (suspend fun, launch, async): лёгкие кооперативные потоки с безопасной отменой.
|
| Пример coroutine | — |
GlobalScope.launch { val data = async { getData() }; println(data.await()) }
|
| Фреймворки (backend) | Spring Boot, Quarkus, Micronaut. | Ktor (JetBrains), Spring Boot (через Kotlin DSL), Micronaut, Javalin, Exposed ORM. |
| Фреймворки (frontend / mobile) | JavaFX, Android SDK. | Jetpack Compose (Android), Kotlin Multiplatform Mobile (KMM), Compose for Desktop, Kotlin/JS. |
| ORM и БД | Hibernate, JPA. | Exposed, Ktorm, Spring Data Kotlin, JPA через Kotlin. |
| Тестирование | JUnit 5, Mockito, TestNG. | JUnit 5 + Kotest, MockK (аналог Mockito, но Kotlin-style). |
| Документация |
Javadoc (/** ... */).
|
KDoc (/** ... */, Markdown, интеграция с IntelliJ).
|
| Логирование | SLF4J, Logback, Log4j. | Те же библиотеки (совместимо). |
| Функциональные элементы | Stream API, lambda, Optional. |
Полноценная FP: map, flatMap, fold, run, let, apply, also, takeIf, takeUnless.
|
| Инструменты сборки | Maven, Gradle. | Gradle Kotlin DSL (нативная поддержка Kotlin). |
| Ассерты / тесты |
assertEquals(a,b) (JUnit).
|
a shouldBe b (Kotest), DSL-тесты.
|
| Паттерн matching / switch |
switch-case.
|
when (универсальный и мощный аналог, возвращает значение).
|
Пример when
|
— |
val msg = when(x){ 1 -> "One" 2 -> "Two" else -> "Other" }
|
| Сборка / CI | Jenkins, Maven, GitLab CI. | Jenkins, Gradle, GitHub Actions, Kotlin DSL CI pipelines. |
| Документирование API | Swagger/OpenAPI. | Swagger через Ktor, Springdoc, или KDoc автогенерация. |
| Фронтенд / UI | JavaFX, JSP. | Jetpack Compose, Compose Multiplatform, Kotlin/JS + React. |
| Android-разработка | Основной язык до 2019. | Официальный язык Android с 2019 года (Google). Полная поддержка Jetpack, Kotlin DSL, coroutines. |
| Сборка Android | XML + Activity. | Jetpack Compose (UI = код), меньше шаблонов и XML. |
| Интероперабельность с Java | 100% двухсторонняя. | 100% двухсторонняя, но Kotlin имеет больше синтаксического сахара. |
| Типичные области применения | Корпоративный backend, Android, микросервисы. | Android, backend (Spring, Ktor), multiplatform, DSL, data pipelines. |
| Производительность | Сопоставима с Kotlin (JVM одинаков). | Равная Java (тот же байткод JVM). Kotlin/Native — чуть медленнее нативных языков. |
| Преимущества | Надёжность, зрелость, предсказуемость. | Короткий, выразительный синтаксис, null-безопасность, корутины, современный дизайн. |
| Недостатки | Многословие, verbosity, checked exceptions. | Медленнее компиляция, сложнее дебаг, не вся Java API “коротко” оборачивается. |
| Философия языка | “Write once, run anywhere.” | “Make code safe, concise, and expressive.” |
| Крупные проекты | LinkedIn, Netflix, Amazon, Android SDK. | Jetpack, Android Studio, Gradle Kotlin DSL, Ktor, Pinterest, Coursera. |
// Пример кода
function hello(name) {
console.log(`Hi, ${name}!`);
}
hello("Sergey");