我只是想知道为什么会编译?它是什么意思,因为它确实编译?
System.out.println(0xp0); // p?
输出:
0.0
JLS对此进行了解释:
HexadecimalFloatingPointLiteral:
HexSignificand BinaryExponent FloatTypeSuffixopt
HexSignificand:
HexNumeral
HexNumeral .
0 x HexDigitsopt . HexDigits
0 X HexDigitsopt . HexDigits
BinaryExponent:
BinaryExponentIndicator SignedInteger
BinaryExponentIndicator:one of
p P
基于以上所述,我希望在.HexDigit
之前是强制性的p
。
这是一个浮点十六进制文字。
对于十六进制浮点字面量,至少需要一位数字(整数部分或小数部分),指数是强制性的,浮点类型后缀是可选的。指数由 ASCII 字母 p 或 P 表示,后跟一个可选的有符号整数。
请参阅此处的规范。