Каким критериям должны соответствовать ссылочные типы

«Каким критериям должны соответствовать ссылочные типы» — вопрос из категории Управление памятью, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ссылочные типы в Kotlin/Java должны быть:

  1. Непримитивными - это классы, интерфейсы, массивы
  2. Хранят ссылку на объект в куче, а не значение
  3. Могут быть null (в Kotlin требуется явное указание ?)
  4. Сравнение через == проверяет ссылки, equals() - содержимое
  5. Передаются по ссылке в методы (копируется только ссылка)

Пример:

data class User(val name: String)

val user1 = User("Alex") // ссылочный тип
val user2 = user1 // копируется ссылка
println(user1 == user2) // true, т.к. одинаковые ссылки

Отличаются от примитивных типов (Int, Boolean и др.), которые хранят значение напрямую и не могут быть null.