Есть ли какой-либо конец подчеркивания в числовых литералах? - PullRequest
3 голосов
/ 09 марта 2012

Я только что прочитал Улучшения в Java7 (http://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html). В этом я вижу, подчеркивает числовые литералы и пытаюсь, как ....

int i=9_000; все в порядке.см. правила для этого он также позволяет, как ...

int i=9____________________________________________________________________________________000;

Есть ли конец Underscores?

Ответы [ 4 ]

5 голосов
/ 14 марта 2012

Нет предела.Почему должно быть?С другой стороны, единственная причина, по которой я вижу использование любого количества подчеркиваний, - это возможность делать причудливые вещи, как в следующем фрагменте кода (создан Джошуа Блохом, если я не ошибаюсь):

private static final int BOND =
     0000_____________0000________0000000000000000__000000000000000000+
   00000000_________00000000______000000000000000__0000000000000000000+
  000____000_______000____000_____000_______0000__00______0+
 000______000_____000______000_____________0000___00______0+
0000______0000___0000______0000___________0000_____0_____0+
0000______0000___0000______0000__________0000___________0+
0000______0000___0000______0000_________0000__0000000000+
0000______0000___0000______0000________0000+
 000______000_____000______000________0000+
  000____000_______000____000_______00000+
   00000000_________00000000_______0000000+
     0000_____________0000________000000007;
4 голосов
/ 09 марта 2012

Вот определение десятичного литерала из JLS :

DecimalNumeral:
    0
    NonZeroDigit Digitsopt
    NonZeroDigit Underscores Digits 

Digits:
    Digit
    Digit DigitsAndUnderscoresopt Digit 

Digit:
    0
    NonZeroDigit

NonZeroDigit: one of
    1 2 3 4 5 6 7 8 9

DigitsAndUnderscores:
    DigitOrUnderscore
    DigitsAndUnderscores DigitOrUnderscore 

DigitOrUnderscore:
    Digit
    _

Underscores:
    _
    Underscores _

Обратите внимание на рекурсивное определение для Underscores, прикол!

4 голосов
/ 09 марта 2012

Нет, ограничений нет. Java допускает любое количество подчеркиваний, хотя, в зависимости от того, как реализован ваш компилятор, вы можете столкнуться с проблемами для странных крайних случаев, таких как несколько миллиардов из них: -)

В тех местах, где вы можете подчеркнуть, языковая спецификация не ограничивает количество. Я подчеркиваю «можно», потому что есть места, где они запрещены, например, перед первой цифрой, после последней, рядом с десятичной точкой и так далее. Но это другая проблема.

Однако вместо того, чтобы спрашивать, возможно ли это, вы должны вместо этого спросить, что будет точкой более чем одного последовательного подчеркивания.

Одно подчеркивание помогает удобочитаемости, естественно группируя числа:

1_000_000
4072_1199_6645_1234
, тогда как более чем один стремится уменьшить удобочитаемость:
1_0_0________000_0
4072___________________________11_9_9_6641234
2 голосов
/ 09 марта 2012

Нет. Вот документ:

http://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html

В Java SE 7 и более поздних версиях любое количество символов подчеркивания (_) может появляются где-то между цифрами в числовом литерале.

...