在Java算术运算期间,JVM不会抛出下溢或溢出异常。很多时候我们会遇到意想不到的结果,并想知道哪里出了问题。
而在 .NET 技术的情况下,我们有溢出和下溢异常。
所以我的问题是,为什么Java被设计成在算术运算期间不抛出这个异常
这可能是多种因素综合作用的结果:
- Java 之前的大型语言使用未经检查的算术。容易出现数值溢出的众所周知的算法往往已经在不依赖于检查算术的情况下解决了潜在的溢出问题。
- 检查算术在大量使用算术指令的算法中引入了显着的开销,这将使 Java 处于显着的劣势,尤其是在基准测试方面。
- 一些算法依赖于静默数值上溢/下溢。如果检查算术运算,重写这些算法很快就会变得非常重要。
- 检查算术对于确保内存安全来说不是必需的(与空指针和数组边界等其他 JVM 检查相反)。
.NET 虚拟执行环境(现已成为 ECMA-335 标准的一部分)引入了针对已检查和未检查算术的单独指令,使其能够独立解决使用现代托管语言工作的开发人员的性能和安全问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)