浮点字面值中“0”作为前缀的含义是什么?

使用“0”(零)作为整数文字中的前缀会将其基数更改为八进制。 这就是为什么

System.out.println(010); 

将打印8 。 但是使用“F”作为后缀

 System.out.println(010F); 

将使它浮动失去八进制基数(返回到十进制)并将打印10.0

010F10F之间有什么区别吗? 使用浮动时,“0”前缀是否有任何意义?

从Java语言规范, 浮点文字

FloatingPointLiteral:

  • DecimalFloatingPointLiteral
  • HexadecimalFloatingPointLiteral

DecimalFloatingPointLiteral:

  • 数字 。 [数字] [ExponentPart] [FloatTypeSuffix]
  • 。 数字[ExponentPart] [FloatTypeSuffix]
  • 数字ExponentPart [FloatTypeSuffix]
  • 数字[ExponentPart] FloatTypeSuffix

Digits

数字:

  • 数字
  • 数字 [DigitsAndUnderscores] 数字

数字:

  • 0
  • NonZeroDigit

DigitsAndUnderscores:

  • DigitOrUnderscore {DigitOrUnderscore}

DigitOrUnderscore:

  • 数字
  • _

强调:

  • _ {_}

浮点文字可以包含任意数量的前导0

我在JLS中找不到任何解释为什么允许这样做的东西,但我可以想象它简化了解析。

八进制表示法仅用于整数,而不用于浮点数。 这不是Java特有的。 所以额外的0没有效果(除了让人类读者感到困惑)。

在Java中,只能用八进制格式(Base-8)表示整数文字。

jls-3.10.1:整数文字

浮点数可以仅以十进制(或)hexforms表示。

jls-3.10.2:浮动文字