我查找了自Java 8以来存在的 Double.isFinite()
的实现(因为我需要Java 7中的功能):
public static boolean isFinite(double d) {
return Math.abs(d) <= DoubleConsts.MAX_VALUE;
}
其中
DoubleConsts.MAX_VALUE
是double 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