java - 为什么,在 Java 算法中,上溢或下溢永远不会抛出异常?

标签 java .net integer-overflow

在 Java Arithmetic 操作期间,JVM 不会抛出 Underflow 或 Overflow Exception。很多时候我们遇到意想不到的结果,想知道哪里出了问题。

而在 .NET 技术的情况下,我们有溢出和取消流异常。

所以我的问题是,为什么 Java 被设计成在算术运算期间不抛出这个异常

最佳答案

这可能是多种因素的结合:

  1. Java 之前的主流语言使用未经检查的算术。容易出现数值溢出的著名算法倾向于在不依赖已检查算术的情况下解决潜在的溢出问题。
  2. 经过检查的算术在大量使用算术指令的算法中引入了显着的开销,这会使 Java 处于明显的劣势,尤其是在基准测试中。
  3. 一些算法依赖于静默的数值上溢/下溢。如果检查了算术运算,重写这些算法很快就会变得非常重要。
  4. 检查算法对于确保内存安全不是必需的(与空指针和数组边界等其他 JVM 检查相反)。

.NET 虚拟执行环境(现在是 ECMA-335 标准的一部分)为已检查和未检查的算法引入了单独的指令,使其能够独立解决使用现代托管语言的开发人员的性能和安全问题。

关于java - 为什么,在 Java 算法中,上溢或下溢永远不会抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16085286/

相关文章:

c# - 从 vb asp 到 C# asp .net 的转换

matlab - 为什么 abs(intmin) ~= -intmin 在 matlab 中

c# - 数组的大小是否受制于int的上限(2147483647)?

java - 如何使用 gecko 获取当前页面 URL?

java - 异步进行一些调用并立即从 Spring Controller 返回

java - 应用根路径

c# - 日志文件, “Padding is invalid and cannot be removed”

java - 如何在 Spring Boot 和 Hibernate 等框架中通过缓慢的启动时间来提高工作效率?

.NET:如何确定对象是否为 COM 对象?

integer - 为什么使用整数而不是长整型?