# V6124. Converting an integer literal to the type with a smaller value range will result in overflow.

Анализатор обнаружил, что переменной целочисленного типа присвоили значение, выходящее за диапазон допустимых значений.

Пример:

    public static void test() {
      byte a = (byte) 256;       // a = 0
      short b = (short) 32768;   // b = -32768
      int c = (int) 2147483648L; // c = -2147483648
    }

В данном примере произойдёт переполнение, и в переменных будут храниться не те значения, которые программист попытался присвоить.

Происходит это потому, что под определённый целочисленный тип выделяется фиксированное количество байт. Если значение выходит за рамки того количества байт, которое под него выделили, то лишние биты у значения отсекаются. Опасность заключается в том, что Java даст скомпилировать и запустить такую программу, но при этом из-за допущенной ошибки программист получит не те значения, которые хотел изначально.

Возможно, стоит рассмотреть использование типа, включающего в себя больший диапазон значений:

    public static void a() {
      short s = (short) 256;
      int i = 32768;
      long l = 2_147_483_648L;
    }

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки целочисленного переполнения и некорректного совместного использования знаковых и беззнаковых чисел.

Данная диагностика классифицируется как:

CWE-197 CWE-681 CERT-NUM12-J