我查找了自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
- 包而不是Double.MAX_VALUE
中的常量?
(Float.isFinite
使用相同的模式)
答案 0 :(得分:2)
原因似乎主要是历史性的:
这些方法提供的功能以前位于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;
}