Ответ
Место хранения примитивного поля зависит от его контекста:
1. Поле объекта (не static): Хранится в куче (Heap), внутри памяти, выделенной для самого объекта.
class Person {
int age; // Примитив 'age' лежит в куче как часть объекта Person
String name; // Ссылка 'name' лежит в куче, объект String — тоже в куче
}
2. Локальная переменная метода: Хранится в стеке (Stack).
void calculate() {
int localSum = 0; // Примитив 'localSum' лежит в стеке фрейма метода calculate
}
3. Статическое поле (static): Хранится в Metaspace (область метаданных класса).
class Settings {
static final int MAX_USERS = 100; // Хранится в Metaspace
}
Итог: Примитивное поле объекта — часть этого объекта и размещается в куче. Локальная примитивная переменная — часть контекста метода и размещается в стеке.