Ответ
Содержимое переменной в Java зависит от её типа:
-
Для примитивных типов (
int,double,boolean,charи т.д.): Переменная хранит непосредственно значение.int count = 42; // В переменной `count` хранится число 42. boolean flag = true; // В переменной `flag` хранится значение true.Место хранения: Стек (stack frame метода).
-
Для ссылочных типов (классы, интерфейсы, массивы): Переменная хранит ссылку (указатель, адрес) на объект, расположенный в куче (heap).
String message = "Hello"; // `message` хранит ссылку на объект String "Hello". List<Integer> list = new ArrayList<>(); // `list` хранит ссылку на новый объект ArrayList. Object obj = null; // `obj` хранит специальную ссылку null, не указывающую на объект.Место хранения: Сама ссылка — в стеке. Объект, на который она указывает, — в куче.
Важное следствие: При присваивании одной ссылочной переменной другой копируется ссылка, а не объект. Обе переменные начинают указывать на один и тот же объект в памяти.
StringBuilder a = new StringBuilder("Hello");
StringBuilder b = a; // b и a теперь ссылаются на один объект
b.append(" World");
System.out.println(a); // Выведет: "Hello World"