Где хранятся примитивные поля объекта в Java: в стеке или в куче?

«Где хранятся примитивные поля объекта в Java: в стеке или в куче?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Примитивные поля объекта хранятся в куче (Heap), как часть памяти, выделенной для самого объекта.

Распределение памяти в Java:

  • Куча (Heap): Хранит все объекты и их поля (как примитивные, так и ссылки на другие объекты).
  • Стек (Stack): Хранит локальные переменные методов (примитивы и ссылки) и вызовы методов.

Пример:

class Person {
    int age; // Примитивное поле -> хранится в куче (часть объекта Person)
    String name; // Ссылочное поле -> в куче хранится ссылка, сам объект String тоже в куче

    void someMethod() {
        int localVar = 30; // Локальная примитивная переменная -> хранится в стеке
        Person temp = this; // Локальная ссылочная переменная -> ссылка хранится в стеке
    }
}

Итог: Примитив внутри объекта — в куче. Локальный примитив внутри метода — в стеке.