为什么Java SE 1.7规则中数字文字中的下划线在八进制和十六进制中不同?八进制文字是否违反规则?

时间:2018-10-12 13:06:07

标签: java literals

根据oracle doc下划线不能放在数字的开头,就可以了。但是,当涉及八进制数时,我们可以在下划线处加下划线。是不是很奇怪?

int x1 = 0x_52;            // Invalid; cannot put underscores at the beginning of a number
int x2 = 0_52;             // OK (octal literal)

1 个答案:

答案 0 :(得分:2)

规则是:

  

下划线允许用作表示整数的数字之间的分隔符。

对于以十六进制/二进制表示的带有基数前缀的文字,表示整数的数字的构成有所不同:

  

...整数只能由0x或0b字符之后和任何类型后缀之前的数字表示。因此,下划线可能不会立即出现在0x或0b之后,或数字的最后一位数字之后。

Octtal 的规则不同:

  

在十进制或八进制文字中,整数由文字中所有类型的数字表示,位于任何类型后缀之前。因此,下划线可能不会出现在数字的第一个数字之前或最后一个数字之后。 下划线可能出现在八进制数字的开头0之后(因为0是表示整数部分的数字),并且出现在非零十进制文字的开头非零数字之后。

参考:https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.1