为什么在Double.NaN = 0.0d / 0.0的定义中出现“ d”?

我刚刚遇到了NaNin 的定义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.00.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

回到顶部