← Назад к вопросам
Где посмотреть диапазоны хранимых примитивами значений в Java?
1.6 Junior🔥 81 комментариев
#Основы Java
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Диапазоны значений примитивов в Java
Диапазоны примитивов определены в классах-обёртках (wrapper classes) в стандартной библиотеке Java.
Как посмотреть диапазоны
1. Через константы классов-обёрток (самый простой способ)
В каждом wrapper классе есть константы MIN_VALUE и MAX_VALUE:
// Целые числа
System.out.println(Byte.MIN_VALUE + " " + Byte.MAX_VALUE); // -128 127
System.out.println(Short.MIN_VALUE + " " + Short.MAX_VALUE); // -32768 32767
System.out.println(Integer.MIN_VALUE + " " + Integer.MAX_VALUE); // -2147483648 2147483647
System.out.println(Long.MIN_VALUE + " " + Long.MAX_VALUE); // -9223372036854775808 9223372036854775807
// Числа с плавающей точкой
System.out.println(Float.MIN_VALUE + " " + Float.MAX_VALUE); // 1.4E-45 3.4028235E38
System.out.println(Double.MIN_VALUE + " " + Double.MAX_VALUE); // 4.9E-324 1.7976931348623157E308
// Символы
System.out.println(Character.MIN_VALUE + " " + Character.MAX_VALUE); // 0 65535 (Unicode)
// Логические (boolean нет MIN/MAX)
2. Использование методов wrapper классов
// Узнать размер в битах
System.out.println(Integer.SIZE); // 32 бита
System.out.println(Long.SIZE); // 64 бита
System.out.println(Byte.SIZE); // 8 бит
// Узнать количество байт
System.out.println(Integer.BYTES); // 4 байта
System.out.println(Long.BYTES); // 8 байт
System.out.println(Double.BYTES); // 8 байт
3. Через рефлексию (редко, но возможно)
Field minValue = Integer.class.getField("MIN_VALUE");
System.out.println(minValue.get(null)); // -2147483648
Таблица диапазонов примитивов
| Тип | Размер | MIN_VALUE | MAX_VALUE |
|---|---|---|---|
| byte | 8 бит | -128 | 127 |
| short | 16 бит | -32,768 | 32,767 |
| int | 32 бита | -2,147,483,648 | 2,147,483,647 |
| long | 64 бита | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
| float | 32 бита | ±1.4E-45 | ±3.4E38 |
| double | 64 бита | ±4.9E-324 | ±1.8E308 |
| char | 16 бит | 0 | 65,535 (Unicode) |
| boolean | 1 бит (в теории) | - | - |
Практические примеры
Проверка переполнения:
public class RangeChecker {
public static void main(String[] args) {
// Integer переполнится
int maxInt = Integer.MAX_VALUE;
System.out.println(maxInt); // 2147483647
System.out.println(maxInt + 1); // -2147483648 (переполнение!)
// Long для больших значений
long largeNumber = 9223372036854775807L; // MAX_VALUE
System.out.println(largeNumber); // 9223372036854775807
}
}
Выбор типа по требуемому диапазону:
public class TypeSelection {
// Возраст (0-150): используй byte
byte age = 25;
// ID пользователя (до миллионов): используй int
int userId = 1000000;
// Количество наносекунд: используй long
long nanoTime = System.nanoTime();
// Точные денежные расчеты: НЕ используй float!
// Используй BigDecimal
java.math.BigDecimal price = new java.math.BigDecimal("19.99");
}
Почему важно знать диапазоны:
public class ImportanceExample {
public static void main(String[] args) {
// Ошибка: Integer недостаточно для количества наносекунд
// int nanos = System.nanoTime(); // Integer переполнится!
long nanos = System.nanoTime(); // Правильно
// Ошибка: float потеряет точность для денег
// float price = 99.99f;
java.math.BigDecimal price = new java.math.BigDecimal("99.99"); // Правильно
// Ошибка: short недостаточно для количества миллисекунд
// short ms = (short) System.currentTimeMillis(); // Переполнится!
long ms = System.currentTimeMillis(); // Правильно
}
}
Специальные значения
Float и Double имеют специальные значения:
System.out.println(Float.POSITIVE_INFINITY); // Infinity
System.out.println(Float.NEGATIVE_INFINITY); // -Infinity
System.out.println(Float.NaN); // NaN (Not a Number)
System.out.println(Double.POSITIVE_INFINITY); // Infinity
System.out.println(Double.NEGATIVE_INFINITY); // -Infinity
System.out.println(Double.NaN); // NaN
// Проверка на Infinity
if (Float.isInfinite(value)) {
System.out.println("Переполнение");
}
// Проверка на NaN
if (Float.isNaN(value)) {
System.out.println("Not a Number");
}
Вывод
Чтобы посмотреть диапазоны примитивов:
- Самый простой способ: Используй константы
Integer.MIN_VALUE,Integer.MAX_VALUEи т.д. - Документация: Смотри официальную документацию Java
- IDE подсказка: Напечатай
Integer.и автодополнение покажет все константы - Помните: Выбирайте тип данных на основе диапазона значений, с которыми вы работаете