Что такое примитивные типы данных в Java?

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

Ответ

Примитивные типы данных (primitive types) в Java — это простые, встроенные в язык типы, которые хранят свои значения непосредственно в переменной (по значению). Они не являются объектами и представляют собой сырые данные.

Характеристики:

  • Хранят значение в стеке (stack memory) или внутри объекта.
  • Имеют фиксированный размер в памяти.
  • Не имеют методов.
  • Не могут быть null (имеют значения по умолчанию).
  • Работа с ними очень эффективна.
Таблица примитивных типов Java: Тип Размер (биты) Диапазон/Значения по умолчанию Класс-обёртка
boolean не определён точно (обычно 1) true / false (по умолчанию false) Boolean
byte 8 от -128 до 127 Byte
char 16 'u0000' до 'uffff' (0 до 65535) Character
short 16 от -32,768 до 32,767 Short
int 32 от -2^31 до 2^31-1 Integer
long 64 от -2^63 до 2^63-1 (суффикс L) Long
float 32 ~1.4e-45 до ~3.4e+38 (суффикс F) Float
double 64 ~4.9e-324 до ~1.8e+308 Double

Примеры объявления:

// Целочисленные типы
byte smallNumber = 100;
short mediumNumber = 30_000;
int age = 30; // Наиболее часто используемый
long bigNumber = 100_000_000_000L; // Требуется суффикс L

// Типы с плавающей точкой
float price = 19.99F; // Требуется суффикс F
double preciseValue = 3.141592653589793; // Тип по умолчанию для дробных

// Символьный и логический типы
char grade = 'A';
boolean isJavaFun = true;

Автоупаковка и автораспаковка (Autoboxing/Unboxing): Начиная с Java 5, компилятор автоматически преобразует примитивы в соответствующие классы-обёртки и обратно, что упрощает код, но требует внимания к производительности и сравнению (== vs .equals()).

Integer boxedInt = 42; // Автоупаковка (int -> Integer)
int primitiveInt = boxedInt; // Автораспаковка (Integer -> int)