javac如何计算public static final int NaN = 0/0?

时间:2012-12-16 07:06:45

标签: java

我想知道javac如何计算这个常量表达式?

class Test {
   public static final int NaN = 0 / 0;
...

2 个答案:

答案 0 :(得分:3)

它在Java Language Specification, §15.17.2

中定义
  

有一种特殊情况不满足此规则:如果被除数是其类型的最大可能幅度的负整数,且除数为-1,则发生整数溢出,结果等于被除数。尽管溢出,但在这种情况下不会抛出异常。另一方面,如果整数除法中的除数值为0,则抛出ArithmeticException

这意味着什么:如果红利是0,那么除数是什么并不重要;它会彻底抛出ArithmeticException

现在,如果您使用的是双打,则可以通过JLS §15.17.2返回NaN

答案 1 :(得分:0)

Java的整数基元类型中没有“NaN”或“Inf”值的表示。 (或者在大多数其他语言中。)

实际发生的是在运行时将抛出ArithmeticException

由于此表达式是在类的静态初始化中计算的,因此初始化类将失败,并且依赖于它的任何其他类也将无法初始化。您的应用程序很可能甚至不会使用main方法的第一个语句。