Ответ
Ссылка на объект хранится в стеке (Stack Memory), а сам объект — в куче (Heap Memory).
Детали:
- Стек: Содержит фреймы методов. В них хранятся локальные переменные, включая ссылки (указатели) на объекты. Сама ссылка — это, по сути, адрес объекта в куче.
- Куча: Область динамической памяти, где размещаются все создаваемые объекты (экземпляры классов) и массивы.
Пример:
public void example() {
// 1. Локальная ссылка 'message' хранится в стеке.
// 2. Объект String("Hello") создается в куче.
// 3. Ссылка 'message' содержит адрес этого объекта в куче.
String message = new String("Hello");
// Примитив хранится прямо в стеке (в значении переменной 'count').
int count = 5;
}
Ключевое отличие от примитивов: Для локальной переменной-примитива (int count = 5) значение 5 хранится прямо в стеке. Для ссылочного типа в стеке хранится только адрес объекта, а не его данные.