2016-04-20 2 views
2

Лучше всего предположить, что дополнительная проверка может вызвать накладные расходы, которые будут вступать в игру ~ 1% (или меньше) того времени, когда кто-либо звонит parseLong с завершающим символом «L».Почему Long.parseLong (String s) не считает конечный «L» действительным?

Но может ли быть другая причина этого «упущения»?

+1

Вы помещаете L для идентификации длинного кода, это по существу не имеет смысла. Это то же самое, что и любая другая буква или символ. Просто удалите его. –

+0

Но разве это не было бы полезно для случаев, когда код должен анализировать код? –

+0

Вы уже объясняете, что имеете дело с «длинным». Дополнительный 'L' требуется для числовых литров, потому что, если он отсутствует, число implicity представляет собой' int' (или 'double' для чисел с плавающей запятой), а не' long'. – SomeJavaGuy

ответ

4

Она определяется так в методе java.lang.Long.parseLong (String):

Символы в строке должны все быть десятичными цифрами, за исключением того, что первый символ может быть ASCII минус знак ...

2

задний L (или l) относится только к Java компилятором отличить int литералов от long литералов. Это не универсальный маркер для длинных значений, поэтому принятие (и игнорирование) было бы более странным побочным эффектом, не говоря уже о источнике ошибок.

1

Думая о прецеденте использования Long.parseLong("1L");. У вас есть длинная цена в виде String с номером l.

Теперь, как вы можете получить это значение в реальных приложениях, рассмотреть графическое или консольное приложение, преобразование номера String в фактический тип не будет иметь суффикса l или d. От входа пользователя в базу данных суффикс l неприемлем для ввода номера. Вы никогда не получите значение String как 1L из бизнес-логики для преобразования в фактическое значение Long.

Удивительно, но с другой стороны Double myDouble = Double.parseDouble("1d"); будет работать нормально, потому что sun.misc.FloatingDecimal удалось разобрать с суффиксом d в количестве, потому что double значение может содержать другие символы, такие как E или e в нем для экспоненциального члена.

Смежные вопросы