请检查以下代码...
// this will produce java.lang.ArithmeticException: / by zero
System.out.println(1 / 0);
// this will produce Infinity result
System.out.println(1.1 / 0);
我假设 Integer 算术总是会抛出 java.lang.ArithmeticException:/为零。如果是这样,我猜第一条语句或 System.out.println(Integer.parseInt("1")/0);
应该产生编译时异常。但是我在 Eclipse IDE 上没有收到任何编译时错误或警告。或者可能是我错了。
有什么建议吗?
最佳答案
Integer.parseInt("1")
只会在运行时执行。编译器甚至不知道解析操作是否会成功。
取决于编译器 1/0
可能会在编译时得到优化,编译器可能只是将结果写入编译后的代码。因此它会在那里抛出异常。但是,如果未优化该计算,则编译器在执行之前不会知道该操作的结果。
顺便说一句,我的 Eclipse 编译器似乎没有这样做(我还没有检查设置)并且编译 1/0
就好了。
更新
尽管 1/0
是一个常量表达式,可以在编译时求值,但编译器可能仍会选择忽略它并编译代码。
这是一个包含更多信息的类似问题:Why doesn't a Java constant divided by zero produce compile time error?
关于java - 为什么在 Eclipse IDE 中不产生编译时异常除以零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22375515/