Можно ли использовать буквы L и E для инициализации литерала 'Long' цифрой c? - PullRequest
2 голосов
/ 08 февраля 2020

Если я объявляю переменную long как:

long n = 1E+12L;

Компилятор выдает синтаксическую ошибку.

И когда я объявляю ее как:

long n = 1E+12;

Он выдает ошибку несовместимых типов.

С другой стороны, он рад принять две буквы в числах с плавающей запятой и двойных числах:

double n = 1E+12D;
float n = 1E+12F;

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

Ответы [ 2 ]

3 голосов
/ 08 февраля 2020

Нет, это невозможно. Использование e или E в числовом литерале c (т. Е. scientifi c нотация ) не допускается Спецификацией языка Java для целочисленных литералов :

IntegerLiteral:
  DecimalIntegerLiteral
  HexIntegerLiteral
  OctalIntegerLiteral
  BinaryIntegerLiteral

DecimalIntegerLiteral:
  DecimalNumeral [IntegerTypeSuffix]

...

IntegerTypeSuffix:
  (one of)
  l L

Допускается для литералов с плавающей точкой , но они не могут иметь суффикс l или L:

FloatingPointLiteral:
  DecimalFloatingPointLiteral
  HexadecimalFloatingPointLiteral

DecimalFloatingPointLiteral:
  Digits . [Digits] [ExponentPart] [FloatTypeSuffix]
  . Digits [ExponentPart] [FloatTypeSuffix]
  Digits ExponentPart [FloatTypeSuffix]
  Digits [ExponentPart] FloatTypeSuffix

ExponentPart:
  ExponentIndicator SignedInteger

ExponentIndicator:
  (one of)
  e E

...

Итак, Вы должны либо разыграть с double, либо полностью выписать свой long литерал. Однако для удобства вы можете использовать подчеркивания для группировки цифр, например, 1_000_000_000_000L, чтобы сделать число нулей понятным.

2 голосов
/ 08 февраля 2020

Почему он не работает для длинных литералов?

E или e не разрешается использовать с int или long. Вы можете использовать их только с float или double

Пожалуйста, проверьте следующий текст из учебника :

Типы с плавающей точкой (float и double) также можно выразить с помощью E или e (для научной c нотации)

нужно ли мне каждый раз опускать букву L и приводить ее к длинному?

Да

...