Какие примитивные типы данных (primitive types) есть в Java?

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

Ответ

В Java определено 8 примитивных типов, которые не являются объектами и хранятся по значению (обычно в стеке).

Тип Размер Диапазон / Значения По умолчанию Пример
byte 8 бит от -128 до 127 0 byte b = 100;
short 16 бит от -32,768 до 32,767 0 short s = 30_000;
int 32 бит от -2³¹ до 2³¹-1 0 int count = 1_000_000;
long 64 бит от -2⁶³ до 2⁶³-1 0L long big = 10_000_000_000L;
float 32 бит ~±3.4e-38 до ~±3.4e+38 0.0f float pi = 3.14f;
double 64 бит ~±1.7e-308 до ~±1.7e+308 0.0d double price = 19.99;
char 16 бит Unicode u0000 до uffff (0 до 65535) u0000 char grade = 'A';
boolean не определен true или false false boolean isReady = true;

Ключевые особенности и best practices:

  • Литералы: Для long используйте суффикс L, для floatf или F.
    long bigNumber = 123L;
    float precise = 2.5f;
  • Автоприведение (widening): Возможно неявное приведение от меньшего типа к большему (например, intlong), но не наоборот.
  • Упаковка/Распаковка (Boxing/Unboxing): Примитивы автоматически конвертируются в соответствующие классы-обёртки (Integer, Double и т.д.) и обратно.
    Integer boxed = 5;     // Автоупаковка (int -> Integer)
    int unboxed = boxed;   // Автораспаковка (Integer -> int)
  • Выбор типа: Используйте int для целых чисел по умолчанию, double — для дробных. byte/short экономят память в больших массивах.