Базовые типы данных
Числа, строки, Any, Unit, Nothing и боксинг
В исходном Kotlin у чисел есть типы и методы; на JVM их представление зависит от контекста. Ненулевой Int обычно использует примитив, а nullable/generic-позиция может требовать упаковки. Не переносите детали JVM на все Kotlin-платформы. Числа.
Числа
Byte, Short, Int, Long — знаковые целые на 8, 16, 32 и 64 бита; Float и Double — числа с плавающей точкой. Примеры литералов: 42L, 1.5f, 0xFF, 0b1010.
val count: Int = 5
val total: Long = count.toLong()
val fromLiteral: Long = 5
val integerResult = 7 / 2 // 3
val fractionalResult = 7 / 2.0 // 3.5
Переменная Int не присваивается в Long автоматически. Литерал 5 может сразу получить ожидаемый целочисленный тип; это не преобразование уже существующего Int. Деление целых отбрасывает дробную часть. Numeric conversion.
Строки и символы
String неизменяем; строковый шаблон "Count: $count" создаёт строковое значение. Char представляет одну кодовую единицу UTF-16, поэтому один Char не всегда равен целому пользовательскому символу. Strings, Characters.
Особые типы
Any — общий супертип ненулевых типов; Any? допускает null. Типы Kotlin.
Unit имеет одно значение и подходит для функции без полезного результата. Nothing не имеет значений: выражение throw не завершается нормально и может стоять в правой части Elvis. Unit, Nothing.
Боксинг
Используйте == для численного значения. === проверяет идентичность объектов, когда значения представлены объектами. Кеш Integer.valueOf гарантирует диапазон −128..127, но может охватывать и другие значения: результат сравнения двух упакованных 1000 нельзя считать универсальной гарантией. Equality, Integer.valueOf.
@JvmInline value class может использовать лежащее внутри значение без обёртки, но generic/interface-контекст и некоторые nullable-представления требуют boxing. Это не обещание нулевых аллокаций во всём коде. Value classes.