Java длинный номер слишком большой ошибки?
Почему я получаю int-номер слишком большим, где long назначается min и max?
/*
long: The long data type is a 64-bit signed two complement integer.
It has a minimum value of -9,223,372,036,854,775,808 and a maximum value of 9,223,372,036,854,775,807 (inclusive).
Use this data type when you need a range of values wider than those provided by int.
*/
package Literals;
public class Literal_Long {
public static void main(String[] args) {
long a = 1;
long b = 2;
long min = -9223372036854775808;
long max = 9223372036854775807;//Inclusive
System.out.println(a);
System.out.println(b);
System.out.println(a + b);
System.out.println(min);
System.out.println(max);
}
}
Ответы
Ответ 1
Все литеральные числа в java по умолчанию ints
, которые имеют диапазон от -2147483648
до 2147483647
включительно.
Ваши литералы находятся за пределами этого диапазона, поэтому для компиляции вам нужно указать, что они long
литералы (т.е. суффикс с L
):
long min = -9223372036854775808L;
long max = 9223372036854775807L;
Обратите внимание, что java поддерживает как верхний регистр L
, так и строчный L
, но я рекомендую не использовать строчный L
, потому что он выглядит как 1
:
long min = -9223372036854775808l; // confusing: looks like the last digit is a 1
long max = 9223372036854775807l; // confusing: looks like the last digit is a 1
Спецификация языка Java для тех же
Integer литерал имеет тип long, если он суффикс с буквой ASCII L или l (ell); в противном случае оно имеет тип int (п. 4.2.1).
Ответ 2
Вы должны использовать L
, чтобы сказать компилятору, что это длинный литерал.
long min = -9223372036854775808L;
long max = 9223372036854775807L;//Inclusive