Используя буквы 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 при назначении длинной переменной, вам нужно будет использовать явный длинный литерал при выражении значения, которое
-
больше
Integer.MAX_VALUE (2147483647)
(или)
-
меньше
Integer.MIN_VALUE (-2147483648)
:long x1 = 12; //OK long x2 = 2147483648; // not OK! That's not a valid int literal long x3 = 2147483648L; // OK