Этот вопрос проверяет понимание автоупаковки, heap-памяти и кэша обёрток.
Переменная j — это ссылка, которая хранится в стеке.
Сам объект Integer создаётся в heap.
Значение 1000 не попадает в Integer Cache, поэтому создаётся новый объект.
Каждый такой Integer(1000) — отдельный объект.
Это может влиять на сравнение по == и на память.
Здесь важно отличать примитив от объекта-обёртки.
Integer — это объект-обёртка над примитивом int, который хранится в heap.
При выполнении:
Integer j = 1000;
JVM выполняет автоупаковку:
Integer j = Integer.valueOf(1000);
Дальнейшие шаги:
Ссылка j создаётся в stack
Объект Integer создаётся в heap
В объекте хранится значение 1000
JVM кэширует значения Integer в диапазоне:
от -128 до 127
Пример:
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true
Integer c = 1000;
Integer d = 1000;
System.out.println(c == d); // false
Причина:
100 берётся из кэша
1000 создаёт новый объект
== сравнивает ссылки, а не значения
Возможен перерасход памяти
GC должен обрабатывать больше объектов
Объекты-обёртки создаются в heap и требуют аккуратного обращения, особенно при сравнении и массовом использовании.