我查看了 Double.isFinite()
的实现从 java 8 开始就存在(因为我需要 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;
}
关于java - Double.isFinite 实现细节 - 为什么是 DoubleConsts.MAX_VALUE 而不是 Double.MAX_VALUE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46362306/