Ответ
Место хранения примитивного значения зависит от его контекста:
- В стеке (Stack Memory): хранятся локальные переменные примитивных типов, объявленные внутри методов или блоков кода. Они существуют только в рамках вызова метода (фрейма).
- В куче (Heap Memory): хранятся примитивные поля, являющиеся частью экземпляра объекта, а также элементы массивов примитивных типов (например,
int[]).
Пример:
public class StorageExample {
private int instanceField = 10; // Хранится в куче как часть объекта
public void calculate() {
int localVar = 20; // Хранится в стеке
int[] numbers = {1, 2, 3}; // Сам массив (объект) и его элементы хранятся в куче
System.out.println(localVar + instanceField);
}
}
Почему так? Это оптимизация производительности. Быстрый доступ к локальным переменным в стеке и централизованное управление долгоживущими данными в куче.