← Назад к вопросам

Где посмотреть диапазоны хранимых примитивами значений в 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_VALUEMAX_VALUE
byte8 бит-128127
short16 бит-32,76832,767
int32 бита-2,147,483,6482,147,483,647
long64 бита-9,223,372,036,854,775,8089,223,372,036,854,775,807
float32 бита±1.4E-45±3.4E38
double64 бита±4.9E-324±1.8E308
char16 бит065,535 (Unicode)
boolean1 бит (в теории)--

Практические примеры

Проверка переполнения:

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");
}

Вывод

Чтобы посмотреть диапазоны примитивов:

  1. Самый простой способ: Используй константы Integer.MIN_VALUE, Integer.MAX_VALUE и т.д.
  2. Документация: Смотри официальную документацию Java
  3. IDE подсказка: Напечатай Integer. и автодополнение покажет все константы
  4. Помните: Выбирайте тип данных на основе диапазона значений, с которыми вы работаете
Где посмотреть диапазоны хранимых примитивами значений в Java? | PrepBro