Используя буквы L в длинной переменной

long l2 = 32;

когда я использую вышеуказанный оператор, я не получаю ошибку (я не использовал l в конце), но когда я использую приведенную ниже инструкцию, я получаю эту ошибку:

литерал 324444444444 типа int находится вне диапазона

long l2 = 3244444444;

если я использую long l2 = 3244444444l;, тогда ошибки нет.

в чем причина этого? Использование l не является обязательным для длинных переменных.

2 ответов


3244444444 интерпретируется как литерал целого числа, но не может поместиться в 32-битной int переменной. Это должно быть буквальное значение Long, требуется l или L в конце:

long l2 = 3244444444l; // or 3244444444L

Подробнее:


обратите внимание, что, хотя литералы int будут автоматически расширяться до long при назначении длинной переменной, вам нужно будет использовать явный длинный литерал при выражении значения, которое

  1. больше Integer.MAX_VALUE (2147483647)

    (или)

  2. меньше Integer.MIN_VALUE (-2147483648):

    long x1 = 12; //OK
    long x2 = 2147483648; // not OK! That's not a valid int literal
    long x3 = 2147483648L; // OK