java - 为什么在 Eclipse IDE 中不产生编译时异常除以零?

标签 java eclipse exception divide-by-zero

请检查以下代码...

    // 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/

相关文章:

Eclipse for Android NDK 中的 C++ static const 多重声明错误

Eclipse 命令行插件

java - 可以运行多个java包,每个包都有一个主类

带绑定(bind)的 Swift catch 枚举大小写

java : Class cast exception

C++ - 返回码异常的参数

java - Java中的单元测试加解密

java - 不可变事件处理

java - 如何让不同类中的两个方法在继续执行之前等待?

java - 如何使用 Java 或正则表达式删除字符串中连字符前后的空格?