Как Kotlin работает с примитивами

Ответ

Kotlin автоматически преобразует примитивные типы (Int, Double, Boolean и др.) в соответствующие Java-примитивы (int, double, boolean) для оптимизации производительности. Однако, если тип используется как nullable (Int?), Kotlin использует классы-обертки (Integer, Double и т.д.).

Пример:

val a: Int = 42          // Примитив (int в байт-коде)
val b: Int? = null       // Обертка (Integer)

В коллекциях Kotlin по умолчанию используются обертки, но можно использовать специализированные (IntArray, DoubleArray) для примитивов.

Ответ 18+ 🔞

Слушай, а вот это вообще офигенная тема, про которую многие даже не задумываются! Kotlin, он же умный, как хитрая жопа, старается за нас всё оптимизировать.

Вот смотри. Объявляешь ты переменную val a: Int = 42. Ну, обычное число. Так вот, Kotlin смотрит на это и думает: «Э, сабака сука, зачем тут обёртка? Чего память зря тратить?». И на этапе компиляции делает из этого примитивный Java-тип int. Всё быстро, всё эффективно, ебать мои старые костыли.

Но! Всё меняется, стоит тебе написать Int? с вопросиком. Ты как бы говоришь: «А вдруг тут null?». И Kotlin такой: «О, ну тут без вариантов, братан. Надо готовить обёртку Integer, потому что примитив null быть не может, это ж пиздец». И вот уже твоя val b: Int? = null превращается в полноценный объект.

val a: Int = 42          // Примитив (int в байт-коде) — летает как угорелый
val b: Int? = null       // Обертка (Integer) — ну, тяжёлая артиллерия для nullable

А теперь самое вкусное — коллекции! По умолчанию, когда ты пишешь List<Int>, Kotlin для надёмости использует обёртки (Integer). Это чтобы всё было универсально и без сюрпризов. Но если у тебя овердохуища чисел и производительность просела, то он тебе шепчет: «Чувак, используй IntArray». Это как раз специализированная штука, которая внутри работает с примитивным int[]. Разница в скорости и памяти — просто ни хуя себе!

Короче, суть в чём: Kotlin не дурак, он старается. Но если ты начинаешь юзать nullable или сложные дженерики — будь готов к обёрткам. А для максимальной скорости — есть специальные массивы. Всё просто, как ёперный театр.