Является ли String в Java примитивным типом данных?

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

Ответ

Нет, String не является примитивным типом. Это ссылочный тип (reference type), полноценный объект класса java.lang.String.

Ключевые отличия от примитивов (int, char, boolean и др.): Признак Примитивные типы String (ссылочный тип)
Хранение Значение в стеке (для локальных переменных) Ссылка в стеке, объект в куче
Значение по умолчанию 0, false и т.д. null
Наличие методов Нет Да (length(), substring(), equals())
Сравнение Оператор == Метод .equals() для сравнения содержимого
Возможность быть null Нет Да

Пример, иллюстрирующий разницу:

int primitiveInt = 100;          // Примитив, хранит значение 100
String referenceString = "Hi";   // Ссылка, указывает на объект String "Hi"
String nullString = null;        // Ссылка может не указывать на объект
// primitiveInt = null; // ОШИБКА КОМПИЛЯЦИИ: примитив не может быть null