我刚刚阅读了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
是否有任何结束?
答案 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及更高版本中,任意数量的下划线字符(_)都可以 出现在数字文字中的数字之间的任何位置。