数字文字中是否存在任何下划线?

时间:2012-03-09 17:33:37

标签: java java-7

我刚刚阅读了Java7中的增强功能( http://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html)。 在那里我看到Underscores Numeric Literals并尝试Like ....

int i=9_000;可以。

但我看到规则,它也允许... ...

int i=9____________________________________________________________________________________000;

Underscores是否有任何结束?

4 个答案:

答案 0 :(得分:5)

没有限制。为什么会这样?另一方面,我看到使用任意数量的下划线的唯一原因是能够做下面的代码中的花哨的东西(由Joshua Bloch创建,如果我没有弄错的话):

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;

答案 1 :(得分:4)

不,没有限制。 Java允许任何数量的下划线,但是,根据编译器的实现方式,您可能会遇到奇怪的边缘情况(如数十亿个)的问题: - )

可以具有下划线的地方,语言规范不限制数量。我强调那里的“可以”,因为有些地方是不允许的,例如在第一个数字之前,在最后一个数字之后,在小数点之后,依此类推。但这是一个不同的问题。

但是,不应该询问是否可能,而应该询问多个连续下划线的是什么。

通过自然地对数字进行分组,一个下划线有助于提高可读性:

1_000_000
4072_1199_6645_1234
但不止一个人倾向于降低可读性:

1_0_0________000_0
4072___________________________11_9_9_6641234

答案 2 :(得分:4)

以下是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的递归定义,有趣!

答案 3 :(得分:2)

没有。这是文件:

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

  

在Java SE 7及更高版本中,任意数量的下划线字符(_)都可以   出现在数字文字中的数字之间的任何位置。