请检查以下代码......
// this will produce java.lang.ArithmeticException: / by zero
System.out.println(1 / 0);
// this will produce Infinity result
System.out.println(1.1 / 0);
我假设整数算术将始终抛出 java.lang.ArithmeticException:/ by zero 。如果是这样,我想第一个语句或System.out.println(Integer.parseInt("1") / 0);
应该产生编译时异常。但是我的 Eclipse IDE 上没有任何编译时错误或警告。或者可能是我错了。
有什么建议吗?
答案 0 :(得分:3)
Integer.parseInt("1")
只会在运行时执行。编译器不知道解析操作是否会成功。
根据编译器1/0
可能在编译时进行优化,编译器可能只是将结果写入编译代码。因此它会在那里抛出异常。但是,如果该计算没有得到优化,编译器在执行之前不会知道该操作的结果。
顺便说一下,我的Eclipse编译器似乎没有这样做(我还没有检查设置)并编译1/0
就好了。
<强>更新强>
虽然1/0
是一个可以在编译时计算的常量表达式,但编译器仍然可以选择忽略它并编译代码。
这里有一些类似的问题,其中包含更多信息:Why doesn't a Java constant divided by zero produce compile time error?