По умолчанию любой тип целочисленных примитивных данных (byte, short, int, long) будет обрабатываться Java-компилятором как тип int . Для byte и short , пока назначенное им значение находится в их диапазоне, проблем нет и суффикс не требуется. Если значение, присвоенное байт и short , превышает их диапазон, требуется явное приведение типа.
Ex:
byte b = 130; // CE: range is exceeding.
чтобы преодолеть это выполнение приведения типа.
byte b = (byte)130; //valid, but chances of losing data is there.
В случае длинного типа данных он может принимать целочисленное значение без каких-либо хлопот. Предположим, что мы назначаем как
Long l = 2147483647; //which is max value of int
в этом случае суффикс типа L / l не требуется. По умолчанию значение 2147483647 считается компилятором java типа int. Внутреннее приведение типов выполняется компилятором, а int автоматически переводится в тип Long.
Long l = 2147483648; //CE: value is treated as int but out of range
Здесь мы должны поставить суффикс как L, чтобы обработать литерал 2147483648 как тип long с помощью компилятора java.
наконец-то
Long l = 2147483648L;// works fine.