Ответ
Место хранения зависит от контекста объявления переменной:
-
В стеке потока (Stack Memory):
- Хранятся локальные переменные примитивных типов, объявленные внутри методов или блоков кода.
- Это включает параметры методов.
- Память выделяется при входе в метод и освобождается при его завершении.
Пример:
public void calculate() { int localInt = 42; // Хранится в стеке double localDouble = 3.14; // Хранится в стеке } -
В куче (Heap Memory):
- Примитивные типы, которые являются полями объекта, хранятся внутри этого объекта в куче.
- Примитивы внутри массивов (например,
int[]) также хранятся в куче.
Пример:
public class MyClass { private int instanceField = 10; // Хранится в куче как часть объекта MyClass } int[] primitiveArray = new int[5]; // Сам массив и его элементы (int) хранятся в куче
Ключевое отличие от ссылочных типов: Значение примитива хранится непосредственно в переменной (в стеке или внутри объекта в куче). Для ссылочного типа в переменной хранится только адрес (ссылка) на объект в куче.