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

public static boolean isFinite(double d) {
    return Math.abs(d) <= DoubleConsts.MAX_VALUE;
}

其中DoubleConsts.MAX_VALUEdouble sun.misc.DoubleConsts.MAX_VALUE,值为1.7976931348623157E308。这似乎等效于Double.MAX_VALUE,其定义为:
public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; // 1.7976931348623157e+308

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

( Float.isFinite 使用相同的模式)

最佳答案

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

这些方法提供的功能以前位于sun.misc.FpUtils中。此类不直接依赖Double,仅导入

import sun.misc.FloatConsts;
import sun.misc.DoubleConsts;

因此该实现在这里更有意义-似乎完全一样:
public static boolean isFinite(double d) {
    return Math.abs(d) <= DoubleConsts.MAX_VALUE;
}

另请参阅The ticket that led to moving this to Double

09-12 17:24