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

Lui*_*ese 5 java floating-point

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

System.out.println(010);
Run Code Online (Sandbox Code Playgroud)

将打印8.但使用"F"作为后缀

System.out.println(010F);
Run Code Online (Sandbox Code Playgroud)

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

有什么区别010F10F?使用浮动时,"0"前缀是否有任何意义?

Sot*_*lis 9

从Java语言规范,浮点文字

FloatingPointLiteral:

  • DecimalFloatingPointLiteral
  • HexadecimalFloatingPointLiteral

DecimalFloatingPointLiteral:

  • 数字.[数字] [ExponentPart] [FloatTypeSuffix]
  • .数字[ExponentPart] [FloatTypeSuffix]
  • Digits ExponentPart [FloatTypeSuffix]
  • 数字[ExponentPart] FloatTypeSuffix

哪里 Digits

数字:

  • 数字
  • 数字 [DigitsAndUnderscores] 数字

数字:

  • 0
  • NonZeroDigit

DigitsAndUnderscores:

  • DigitOrUnderscore {DigitOrUnderscore}

DigitOrUnderscore:

  • 数字
  • _

强调:

  • _ {_}

您可以拥有任意数量的0浮点文字前导.

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


Glo*_*del 6

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