Что такое ссылочный тип данных в Java?

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

Ответ

Ссылочный тип (reference type) — это тип данных, переменная которого хранит не само значение, а ссылку (адрес в памяти) на объект, где это значение находится. Все объекты в Java, включая массивы и строки, относятся к ссылочным типам.

Ключевые отличия от примитивных типов: Признак Примитивный тип (int, boolean) Ссылочный тип (String, Object, массив)
Хранение Значение Ссылка на объект в куче (Heap)
Значение по умолчанию 0, false и т.д. null
Передача в метод По значению (копируется) По ссылке (копируется адрес)

Пример, демонстрирующий поведение ссылок:

String a = "Java"; // a ссылается на строковый литерал в пуле строк
String b = a;       // b получает копию ссылки из a. Обе переменные указывают на один объект.
b = "Python";      // Теперь b ссылается на новый объект "Python". a по-прежнему указывает на "Java".

int[] arr1 = {1, 2, 3};
int[] arr2 = arr1;  // arr2 и arr1 ссылаются на один массив.
arr2[0] = 99;       // Изменение через arr2 видно через arr1: arr1[0] теперь тоже 99.