Ответ
Примитивные объекты (int, float, boolean и т.д.), входящие в состав динамических объектов, хранятся непосредственно внутри самого объекта в heap (куче). В Java/Kotlin все объекты создаются в куче, включая их примитивные поля.
Пример:
class Person {
var age: Int = 25 // примитив хранится внутри объекта Person в куче
var name: String = "Ivan" // ссылка на String в куче
}
Для локальных переменных примитивы хранятся в stack, но если они являются полями объектов - всегда в куче. В Android это важно учитывать для оптимизации памяти.