Java длинный номер слишком большой ошибки? - программирование
Подтвердить что ты не робот

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);
    }
}
4b9b3361

Ответ 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