Ответ
Kotlin предоставляет объекты-обёртки для примитивных типов, чтобы использовать их в nullable-контекстах или коллекциях. Основные:
Int?→java.lang.IntegerLong?→java.lang.LongDouble?→java.lang.DoubleBoolean?→java.lang.BooleanChar?→java.lang.Character
Пример:
val nullableInt: Int? = null // Боксируется в Integer
val list: List<Int> = listOf(1, 2) // При компиляции использует int[]
Автобоксинг: Kotlin автоматически конвертирует примитивы в обёртки и обратно, когда это требуется (например, при передаче в Java-метод, ожидающий Integer).