浮点字面值中“0”作为前缀的含义是什么?
使用“0”(零)作为整数文字中的前缀会将其基数更改为八进制。 这就是为什么
System.out.println(010);
将打印8
。 但是使用“F”作为后缀
System.out.println(010F);
将使它浮动失去八进制基数(返回到十进制)并将打印10.0
。
010F
和10F
之间有什么区别吗? 使用浮动时,“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:浮动文字