Java Double.isFinite实现细节-为什么是DoubleConsts.MAX\u值而不是Double.MAX\u值?

Java Double.isFinite实现细节-为什么是DoubleConsts.MAX\u值而不是Double.MAX\u值?,java,java-8,Java,Java 8,我查找了自java 8以来存在的实现(因为我需要java 7中的功能): 为什么此实现使用sun.misc-包中的常量而不是 (使用相同的模式)原因似乎主要是历史原因: 这些方法提供的功能以前位于sun.misc.FpUtils。此类不直接依赖于双精度,它只导入 import sun.misc.FloatConsts; import sun.misc.DoubleConsts; 因此,这里的实施更有意义——似乎完全一样: public static boolean isFinite(doubl

我查找了自java 8以来存在的实现(因为我需要java 7中的功能):

为什么此实现使用
sun.misc
-包中的常量而不是


(使用相同的模式)

原因似乎主要是历史原因:

这些方法提供的功能以前位于
sun.misc.FpUtils
。此类不直接依赖于双精度,它只导入

import sun.misc.FloatConsts;
import sun.misc.DoubleConsts;
因此,这里的实施更有意义——似乎完全一样:

public static boolean isFinite(double d) {
    return Math.abs(d) <= DoubleConsts.MAX_VALUE;
}
公共静态布尔值是有限的(双d){

return Math.abs(d)好问题,我会理解,如果将其定义为
public static final double MAX_VALUE=DoubleConsts.MAX_VALUE
,那么常量将全部放在一个地方,但这…有趣的是,
DoubleConsts.MAX_VALUE
直接定义为
java.lang.double.MAX_VALUE
。可能是谁写的该函数只是在谷歌上搜索了一些东西,首先找到了
DoubleConsts.MAX\u VALUE
引用?我对
MIN\u NORMAL
的情况更为陌生-
Double
DoubleConsts
包含此值的不同文字表示。实际上,只有一个地方
Double
直接使用它s自身的常数没有通过
DoubleConsts
进行间接定向:
isInfinite
直接使用
正无穷
负无穷
,尽管也有
双常量。正无穷
双常量。负无穷
。推测:之前提到过它是不正确的在
sun.misc.FpUtils
中,可能他们只是保持代码不变而只是移动了它?如果是这样,这可能需要报告-我猜是小错误修复
import sun.misc.FloatConsts;
import sun.misc.DoubleConsts;
public static boolean isFinite(double d) {
    return Math.abs(d) <= DoubleConsts.MAX_VALUE;
}