Ответ
Примитивы хранятся непосредственно в стеке (Stack Memory) как часть фрейма метода. Объекты создаются в куче (Heap Memory), а в стеке хранится только ссылка на этот объект.
Пример и различия:
public class StorageExample {
public static void main(String[] args) {
int count = 10; // Примитив 'count' и его значение 10 — в стеке.
String text = "Hello"; // Ссылка 'text' — в стеке, объект String "Hello" — в куче.
Object obj = new Object(); // Ссылка 'obj' — в стеке, сам Object — в куче.
}
}
Практические следствия:
- Скорость доступа: доступ к примитивам в стеке быстрее, чем к объектам в куче.
- Передача в методы:
- Примитивы передаются по значению (копируется само значение).
- Объекты передаются по ссылке на значение (копируется ссылка, а не сам объект).
- Управление памятью: память стека очищается автоматически при выходе из метода, а память кучи очищается сборщиком мусора (Garbage Collector).