С чем связан максимальный диапазон значений примитивных типов в Java?

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

Ответ

Максимальный диапазон значений в Java определяется разрядностью (количеством бит) примитивных типов данных и их представлением в памяти (знаковое/беззнаковое).

Основные типы и их пределы:

Тип Размер Диапазон
byte 8 бит -128 до 127
short 16 бит -32 768 до 32 767
int 32 бита -2³¹ до 2³¹-1 (≈ ±2.14 млрд)
long 64 бита -2⁶³ до 2⁶³-1 (≈ ±9.22×10¹⁸)
char 16 бит 0 до 65 535 (беззнаковый)

Почему именно такие пределы?

  • Для знаковых целых типов (byte, short, int, long) используется дополнительный код (two's complement). Один бит отводится под знак, поэтому диапазон несимметричен (например, для int: -2³¹ до 2³¹-1).
  • Максимальные значения доступны через константы классов-обёрток:
int maxInt = Integer.MAX_VALUE;     // 2_147_483_647
long maxLong = Long.MAX_VALUE;      // 9_223_372_036_854_775_807
int maxArraySize = Integer.MAX_VALUE - 8; // Практический предел размера массива

Для работы с числами вне диапазона используется класс BigInteger (произвольная точность).