为什么自动装箱/拆箱失败?

时间:2011-07-23 13:05:05

标签: java autoboxing

在下面的程序中,结果是0.0被视为小于Double.MIN_VALUE。为什么呢?

我们有一个解决方案(仅使用Doubles并使用compareTo),我想了解为什么取消装箱在这里失败。

import java.util.Date;
import java.util.Calendar;
import java.math.BigDecimal;

public class Test {

  public static void main(String[] args) {
    double max = 99999.9999;
    double min = Double.MIN_VALUE;
    Double test = 0.0;

    System.out.println(max > test); // expect true; is true
    System.out.println(test > min); // expect true; is false
  }
}

4 个答案:

答案 0 :(得分:11)

根据Javadocs

  

MIN_VALUE

     

一个常量,保持double类型的最小正非零值,2 -1074

换句话说,它大于0。

答案 1 :(得分:5)

您应该阅读Double.MIN_VALUE规范。 它是最小可能但正的Double值,这意味着它大于0.0。

A constant holding the smallest positive nonzero value of type double, 2-1074.
It is equal to the hexadecimal floating-point literal 0x0.0000000000001P-1022
and also equal to Double.longBitsToDouble(0x1L). 

答案 2 :(得分:2)

Double.MIN_VALUE = 4.9E-324这仍然是一个正数。我想你正在寻找min = - Double.MAX_VALUE

答案 3 :(得分:2)

根据我的说法,autoboxing没有问题。 也许您只需要使用Double.NEGATIVE_INFINITY或Double.POSITIVE_INFINITY之类的东西,它应该与<和>运营商。例如,请注意

-Double.MAX_VALUE > Double.NEGATIVE_INFINITY
为真!