Что означает "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 из-за расширения знака.

Другие вопросы по тегам