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

Alp*_*iya 7 .net java integer-overflow

在Java算术运算期间,JVM不会抛出下溢或溢出异常.很多时候,我们遇到了意想不到的结果,并想知道出了什么问题.

在.NET技术的情况下,我们有溢出和Undeflow异常.

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

Sam*_*ell 6

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

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

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