Равенство

В Kotlin есть два типа равенства:

  • Равенство ссылок (две ссылки указывают на один и тот же объект)
  • Равенство структур (проверка через equals())

Равенство ссылок

Равенство ссылок проверяется с помощью оператора === (и его отрицания !==). Выражение a === b является истиной тогда и только тогда, когда a и b указывают на один и тот же объект.

Равенство структур

Структурное равенство проверяется оператором == (и его отрицанием !=). Условно, выражение a == b транслируется в:

a?.equals(b) ?: (b === null)

Т.е. если a не null, вызывается функция equals(Any?), иначе (т.е. если a указывает на null) b ссылочно сравнивается с null. Заметьте, что в явном сравнении с null для оптимизации нет смысла: a == null будет автоматически транслироваться в a === null.