Глиф Учебники

Чем Kotlin отличается от Java

Справочник · Kotlin · 2 минуты чтения

Kotlin и Java работают на одной виртуальной машине (JVM) и полностью совместимы: из Kotlin вызываются любые библиотеки Java, а из Java — код на Kotlin, и оба языка можно смешивать в одном проекте. Разница — в самом языке: первая версия Kotlin вышла через двадцать лет после первой Java, и то же самое он записывает короче и строже.

Главные отличия

JavaKotlin
Пустые значениялюбая ссылка может быть null, ошибка видна при запускеString не бывает null, String? — бывает; проверяет компилятор
Переменныеint x = 5;, final int x = 5;var x = 5, val x = 5 — тип выводится
Точка с запятойобязательнане нужна
Класс с даннымиконструктор, геттеры, equals, toString пишутся или генерируются; с Java 16 — recorddata class одной строкой
Сравнение строкa.equals(b), а == сравнивает ссылкиa == b сравнивает текст
Выбор значенияcond ? a : b, switchif и when возвращают значение
Наследованиеклассы открыты, закрывают словом finalклассы закрыты, открывают словом open
Общее для классаstaticcompanion object или функции вне классов
Проверяемые исключенияthrows обязателенпроверяемых исключений нет
Параметры по умолчаниюнет, пишут перегрузкиfun f(x: Int = 0)
Создание объектаnew Person("Anna")Person("Anna")

Один и тот же класс

Java:

Java
public class Person {
    private final String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() { return name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}

Kotlin:

Kotlin
class Person(val name: String, var age: Int)

Обе версии дают одно и то же: свойство name только для чтения и изменяемое age. Из Java к классу на Kotlin обращаются привычно — person.getName(), а из Kotlin к классу на Java — как к свойству: person.name.

Что ещё есть в Kotlin

Java тоже развивается: в новых версиях появились var для локальных переменных, record, выражения switch и сопоставление с образцом. Разрыв меньше, чем был в 2016 году, но null-безопасности в Java на уровне компилятора нет.

Что учить первым

Знания переносятся: циклы, классы, коллекции и библиотеки JVM устроены одинаково. Тот, кто выучил один язык, читает код на втором почти сразу. Курс по Java — в теме Java.

Подводные камни при переходе с Java