【问题标题】:Why the program is not throwing an exception when there is an overflow or underflow [duplicate]为什么程序在溢出或下溢时不抛出异常[重复]
【发布时间】:2016-04-12 22:09:18
【问题描述】:

当超过整数的最大值(溢出)时,将最小值分配给它。
例如-System.out.println(Integer.MAX_VALUE+1); 输出:-2147483648
这里程序没有抛出异常,而是返回了错误的值。
此功能如何以任何方式帮助程序员或设计人员?

【问题讨论】:

  • 这不是一个不正确的值,它是绝对正确的 - Java 中的整数是有符号的 32 位数字 - 将 1 添加到它的 MAX 值循环它回到它的最低值.. 它是什么你有...stackoverflow.com/a/5131206/4252352
  • 从@MarkKeen 的数据类型角度来看绝对正确。但是,当开发人员编写计算代码时(例如:int x=3*1000000000),他不希望将负值分配给变量 x。这就是为什么我从开发人员的角度说它是一个错误的价值。我在计算 3% 的数字时在我的项目中遇到了这个问题。我误以为java会通过异常或错误但永远不会计算出错误的结果。
  • 所以,这只是关于您希望溢出如何工作的意见:抛出异常,而不是产生意外结果?这是一个无法回答的问题 - 这就是它的工作原理,您已经知道这一点,您只需进行相应的工作,即编码检查/测试/正确的变量分配(int、long 等)。我不能说有一种编程语言可以完全按照每个人的需要和期望......

标签: java exception exception-handling integer-overflow


【解决方案1】:

我只是不认为 java 的原始实现者想要检查计算是否导致溢出的开销。您可以以编程方式检查。例如How does Java handle integer underflows and overflows and how would you check for it?

这也是传统 C 和 C++ 处理整数的方式,因此有先例。

【讨论】:

    【解决方案2】:

    它不需要在每次算术运算后检查溢出,从而使代码运行得更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      相关资源
      最近更新 更多