为什么在Double.NaN = 0.0d / 0.0的定义中出现“ d”?
我刚刚遇到了NaN
in 的定义Double.class
。它说:
/** * A constant holding a Not-a-Number (NaN) value of type
* {@code double}. It is equivalent to the value returned by
* {@code Double.longBitsToDouble(0x7ff8000000000000L)}.
*/
public static final double NaN = 0.0d / 0.0;
我知道,根据Java规范这些文字代表了同一个号码:0.0
,0.0d
,和0.0D
。
同样对于其他常量,它们不使用’d’后缀:
public static final double POSITIVE_INFINITY = 1.0 / 0.0;public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
他们为什么需要在NaN定义中将后缀d写入0.0的第一部分?
这是故意还是偶然?
回答:
根据Oak语言规范,浮点文字的格式为:
- 2.0d或2.0D double
- 2.0f或2.0F或2.0 float
但这在Java 1.0版中变成了熟悉的Java方式
如果浮点文字后缀为ASCII字母F或f,则其类型为float。否则,其类型为double,并且可以选择在其后缀ASCII字母D或d。
也许是为了使它与类似于C的语言保持一致而进行了更改,在这种语言中,后缀的缺乏意味着加倍。
因此,这d
似乎是一个历史遗迹;不过,在Oak规范的链接版本(“初步”)中,有一个注解指出NaN尚未实现。也许它是在稍晚的版本中实现的,此后一直保持不变。
以上是 为什么在Double.NaN = 0.0d / 0.0的定义中出现“ d”? 的全部内容, 来源链接: utcz.com/qa/432949.html