Ответ
Примитивные типы (например, int, double, boolean) хранят значения напрямую в стеке, имеют фиксированный размер и передаются по значению (при присваивании копируется само значение).
Ссылочные типы (например, объекты, массивы, String) хранят в переменной ссылку (адрес) на объект в куче. Сам объект может быть произвольного размера. При присваивании копируется только ссылка, поэтому несколько переменных могут указывать на один и тот же объект.
Ключевые отличия:
- Хранение: Примитивы — в стеке, ссылочные — ссылка в стеке, объект в куче.
- Передача: Примитивы — по значению (копия), ссылочные — по ссылке (копия ссылки).
- Null: Примитивы не могут быть
null, ссылочные — могут. - Методы: У примитивов нет методов, у объектов ссылочных типов — есть.
- Производительность: Работа с примитивами обычно быстрее из-за отсутствия накладных расходов на работу с кучей.
Пример:
// Примитивный тип (передача по значению)
int a = 5;
int b = a; // Копируется значение 5
b = 10; // Изменяется только b, a остаётся 5
System.out.println(a); // 5
// Ссылочный тип (передача ссылки)
int[] arr1 = {1, 2};
int[] arr2 = arr1; // Копируется ссылка на массив
arr2[0] = 99; // Изменяется объект в куче
System.out.println(arr1[0]); // 99 (arr1 и arr2 ссылаются на один массив)