“0”作为浮点文字中的前缀是什么意思?

What's the meaning of "0" as prefix in a floating point literal?

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

System.out.println(010);

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

System.out.println(010F);

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

010F10F有区别吗?使用浮点数时,“0”前缀有任何意义吗?

八进制符号仅用于整数,不适用于浮点数。这并非特定于 Java。所以额外的 0 没有任何效果(除了让人类感到困惑 reader)。

在 Java.

中只有整数文字可以用八进制形式(Base-8)表示

jls-3.10.1 : Integer Literals

浮点数只能以十进制(或)十六进制形式表示。

jls-3.10.2 : Floating Literals

来自 Java 语言规范,在 Floating Point literals

FloatingPointLiteral:

  • DecimalFloatingPointLiteral
  • HexadecimalFloatingPointLiteral

DecimalFloatingPointLiteral:

  • Digits . [Digits] [ExponentPart] [FloatTypeSuffix]
  • . Digits [ExponentPart] [FloatTypeSuffix]
  • Digits ExponentPart [FloatTypeSuffix]
  • Digits [ExponentPart] FloatTypeSuffix

其中 Digits

Digits:

  • Digit
  • Digit [DigitsAndUnderscores] Digit

Digit:

  • 0
  • NonZeroDigit

DigitsAndUnderscores:

  • DigitOrUnderscore {DigitOrUnderscore}

DigitOrUnderscore:

  • Digit
  • _

Underscores:

  • _ {_}

对于浮点文字,您可以有任意数量的前导 0

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