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

The analyzer found that an integer variable was assigned a value beyond the valid range.

Example:

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

In this example, an overflow will occur, and the variables will not store the values that a programmer tried to assign.

This happens because a fixed number of bytes is allocated for a certain integer type. If the value goes beyond the number of bytes allocated for it, then extra bits of the value are cut off. This may be dangerous as Java will allow the programmer to compile and run such a program, but at the same time, due to an error, the programmer will not receive the expected values.

It is worth considering using a type that includes a larger range of values:

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

This diagnostic is classified as:

CWE-197 CWE-681 CERT-NUM12-J