Какой диапазон значений у типа Integer в Java?

Ответ

Тип Integer (обёртка для примитива int) в Java имеет диапазон от -2³¹ до 2³¹ - 1.

Конкретные значения:

  • Минимальное: Integer.MIN_VALUE = -2 147 483 648
  • Максимальное: Integer.MAX_VALUE = 2 147 483 647

Причина: Примитив int занимает 32 бита (4 байта) в памяти, используя один бит для знака (дополнительный код).

Пример и важные следствия:

System.out.println(Integer.MIN_VALUE); // -2147483648
System.out.println(Integer.MAX_VALUE); // 2147483647

// Переполнение (integer overflow) приводит к циклическому заворачиванию (wrap-around)
int max = Integer.MAX_VALUE;
int overflow = max + 1; // Результат: -2147483648 (Integer.MIN_VALUE)

// Для арифметики без ограничений используйте long (64-bit) или BigInteger
long safeResult = (long) max + 1; // 2147483648
BigInteger hugeNumber = BigInteger.valueOf(max).add(BigInteger.ONE);

Практическое правило: При работе с потенциально большими числами (например, суммами, идентификаторами) используйте long.

Ответ 18+ 🔞

Давай разберём этот ваш Integer, а то некоторые думают, что это просто циферки, а там, блядь, целый театр с переполнением и прочей хуйнёй.

Смотри, есть у нас в Java такой тип Integer. Это, по сути, коробочка для примитива int. А сам int — это 32 бита, четыре байта, один из которых, сука, на знак работает. И из-за этой ёбаной архитектуры получается вот такой диапазон: от -2³¹ до 2³¹ - 1.

Если конкретнее, то:

  • Самое маленькое: Integer.MIN_VALUE = -2 147 483 648
  • Самое большое: Integer.MAX_VALUE = 2 147 483 647

Вот, запомни эти цифры, они тебе ещё пригодятся, когда всё пойдёт по пизде.

А теперь главный трюк, от которого у новичков волосы дыбом встают — переполнение. Представь, ты дошёл до края, до этого самого MAX_VALUE, и решил прибавить единичку. Ну, логично же, да? Ан нет, ёпта!

int max = Integer.MAX_VALUE;
int overflow = max + 1; // И что мы получим? А получим -2147483648 (то есть MIN_VALUE)!

Вот так, блядь. Не ошибку, не исключение, а тихонечко, как крыса, перепрыгнул на другую сторону диапазона. Это называется wrap-around, или, по-нашему, "завернуло нахуй". Система дополнения до двух так работает, ебать её в сраку.

И что делать, спросишь? А я тебе скажу: не доверяй этим int, когда дело пахнет большими числами. Чувствуешь подвох — сразу на long переходи, у него 64 бита, там просто овердохуища места.

long safeResult = (long) max + 1; // Вот теперь будет честные 2147483648
// А если совсем охерел и числа космические — бери BigInteger, там вообще лимитов нет.
BigInteger hugeNumber = BigInteger.valueOf(max).add(BigInteger.ONE);

Короче, правило простое, как три копейки: если сомневаешься, хватит ли int, — бери long. Сэкономишь себе кучу нервов, когда в три часа ночи будешь искать, почему твоя сумма заказов внезапно ушла в глубокий минус. Пиздец, а не баг.