Что означает "public static final long USER_ACCOUNT = 32L"? что означает суффикс L в длинной переменной?
Я нашел фрагмент кода здесь
public static final long USER_ACCOUNT = 32L;
что это означает 32L
Вот? это значит просто long
переменная, имеющая числовое значение 32
или это значит долго будет принимать 32 битные значения?
а что если я не предоставлю последнее L
конец цифры 32
?
3 ответа
Для написания длинного литерала на Java требуется суффикс "L". (Вы можете использовать строчную букву "l", но это очень легко неверно истолковать как единое целое.) Длинные константы хранятся в виде 64-битных двух-дополнительных значений. Без "L" это было бы буквально int; но в этом случае это дало бы тот же результат.
Вот ссылка [ http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html] на короткую страницу документации Oracle Java, которая раскрывается в этом посте. Первая часть страницы рассказывает о типах данных Java и том, сколько памяти занимает каждый тип, а следующая часть страницы рассказывает о том, как писать литералы Java для каждого из различных типов данных.
Да, это длинная константа, L (заглавная L) - просто суффикс.
Спецификация Java допускает использование суффиксов как в верхнем, так и в нижнем регистре, но предпочтительна версия в верхнем регистре для длинных букв, так как заглавную букву L легче спутать с цифрой 1, чем строчной буквой l.
Вы можете получить больше информации о спецификациях Java здесь.
Давайте проясним это:
- В Java
32
является целочисленной константой типаint
, 32L
является целочисленной константой типаlong
,
Почему важно различать эти два типа? Вот правила:
int
константа не должна превышать диапазонint
что составляет от -2147483648 до 2147483647 включительно. Значения вне этого диапазона вызывают ошибку компиляции, например4123456789
,long
константа не должна превышать диапазонlong
, что является гораздо большим диапазоном.Когда
long
константа присваиваетсяlong
переменная, это просто и ничего особенного не происходит. Например:long val = 32L;
Когда
int
константа присваиваетсяlong
переменная,int
значение преобразуется вlong
значение по правилам преобразования целочисленных значений Java - это означает, что оно расширено от 32 до 64 бит со знаком. В этом случае,(long)32
точно так же, как32L
, такlong val = 32;
делает то же самое.Тем не менее, некоторые случаи являются обманчивыми:
int
постоянная0xFFFFFFFF
неравенlong
постоянная0xFFFFFFFFL
, Это потому, что преобразование0xFFFFFFFF
вlong
дает0xFFFFFFFFFFFFFFFFL
из-за расширения знака.