Чем ограничены диапазоны значений примитивных типов в Java?

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

Ответ

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

Основные типы и их ограничения:

Тип Размер Диапазон значений
byte 8 бит от -128 до 127
short 16 бит от -32 768 до 32 767
int 32 бита от -2³¹ (-2 147 483 648) до 2³¹-1 (2 147 483 647)
long 64 бита от -2⁶³ до 2⁶³-1
float 32 бита ~±3.4e-38 до ~±3.4e+38 (с плавающей точкой, IEEE 754)
double 64 бита ~±1.7e-308 до ~±1.7e+308

Пример переполнения (overflow):

int maxInt = Integer.MAX_VALUE; // 2 147 483 647
System.out.println(maxInt + 1); // -2 147 483 648 (переполнение!)

Для работы с числами вне этих диапазонов используйте классы BigInteger (для целых) и BigDecimal (для чисел с плавающей точкой), которые хранят числа в виде объектов произвольной точности.