Что хранится в переменной в Java?

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

Ответ

Содержимое переменной в Java зависит от её типа:

  1. Для примитивных типов (int, double, boolean, char и т.д.): Переменная хранит непосредственно значение.

    int count = 42;      // В переменной `count` хранится число 42.
    boolean flag = true; // В переменной `flag` хранится значение true.

    Место хранения: Стек (stack frame метода).

  2. Для ссылочных типов (классы, интерфейсы, массивы): Переменная хранит ссылку (указатель, адрес) на объект, расположенный в куче (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"