2016-01-12 6 views
2

я нашел фрагмент кода здесьЧто означает «public static final long USER_ACCOUNT = 32L»? какой суффикс L означает в длинной переменной?

public static final long USER_ACCOUNT = 32L; 

что это значит 32L здесь? означает ли это только переменная long с числовым значением 32, или это означает, что long займет 32 бит значений?

а что если я не предоставляю последние L конец цифры 32?

+1

это означает, что USER_ACCOUNT является константой и будет доступен для всех остальных классов и не может быть изменен. 32L показывает, что переменная является длинной. Он представляет значение не 32 бита –

+3

Важным является модификатор 'final'. 'public static final' делает примитивную (или String) * компиляцию-константу времени * и передает значения этого поля в самом байтовом коде. Вы поймете точную разницу, если вы посмотрите на байтовый код, используя 'javap -v classname' – TheLostMind

ответ

3

Суффикс «L» необходим для написания длинного литерала на Java. (Вы можете использовать нижний регистр «l», но это очень легко неправильно интерпретировать как один.) Длинные константы хранятся как значения 64-битного двоичного кода. Без «L» это было бы int literal; но в этом случае он даст тот же результат.

Здесь ссылка [http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html]] на короткую страницу в документации Oracle Java, которая расширяется в этом сообщении. Первая часть страницы рассказывает о типах данных Java и количестве памяти каждого типа, а следующая часть страницы рассказывает о том, как писать литералы Java для каждого из разных типов данных.

+0

thnank вас за объяснение –

2

Да, это длинная константа, L (Capital L) - это просто суффикс.

Спецификация Java допускает как суффикс верхнего, так и нижнего регистра, но предпочтительнее версия верхнего регистра для длин, так как верхний регистр L менее легко путать с номером 1, чем нижний регистр l.

Узнать больше о спецификациях Java here.

+0

, что, если я не предоставил последний L? это влияет? –

+2

@GirdharSinghRathore не в этом случае. Вы должны указать суффикс 'L' явно, если константа слишком велика, чтобы вписаться в' int'. –

+0

ok Благодарим вас за объяснение –

1

Давайте сделаем это ясно:

  • В Java, 32 является integal константа типа int.
  • 32L - это постоянная константа типа long.

Почему важно различать эти два типа? Вот правила:

  • int константа не должна превышать диапазон int, который от -2147483648 до 2147483647 включительно. Значения вне этого диапазона вызывают ошибку компиляции, например 4123456789.

  • A 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 из-за расширения знака.

+0

* 32L - целочисленная константа типа long. *? – TheLostMind