В Java имеется 9 возможных типов
значения переменной: ссылка на объект или один из восьми примитивных типов:
🔘 byte – знаковое целое число от -2^7 до 2^7-1;
🔘 short – знаковое целое число от -2^15 до 2^15-1;
🔘 int – знаковое целое число от -2^31 до 2^31-1;
🔘 long – знаковое целое число от -2^63 до 2^63-1;
🔘 float – знаковое число
с плавающей точкой 32 бита стандарта IEEE 754;
🔘 double – то же, что и float, но 64 бита;
🔘 char – 16-битный символ Unicode, от
'\u0000'(0) до
'\uffff'(65535);
🔘 boolean –
true или
false;
По умолчанию поля примитивных типов принимают нулевые значения:
0,
0L,
'\u0000',
false. Про особенности работы, способ хранения и специальные значения чисел с плавающей точкой стоит
почитать подробнее.
Отдельная интересная тема –
boxing/unboxing. Каждый примитивный тип снабжен своей ссылочной версией. Примитивное значение заворачивается и разворачивается из него автоматически при необходимости. Это может приводить к большим затратам на выделение памяти, когда например
int индекс цикла используется в качестве значения переменной
Object и превращается в
Integer без нужды – частая задача на собеседованиях. Еще классы-обертки содержат набор утилитарных методов для их примитивов.
Сколько памяти занимает примитив – вопрос с подвохом. Спецификация требует, чтобы размер был
достаточным для всех значений. Конкретный размер определяется реализацией JVM, он может быть больше. Например в 64-bit HotSpot переменная boolean
занимает не 1 бит, а 8.
Для полного погружения рекомендуется подробный
официальный туториал по примитивным типам.