为什么当我不能使用Integer时Java不会告诉我?

RoflcoptrException:

对于一个小型项目(问题10项目Euler),我尝试将所有200万以下的质数求和。因此,我使用了蛮力方法,并从0迭代到2'000'000,并检查该数字是否为质数。如果是我将其添加到总和:

private int sum = 0;

private void calculate() {
   for (int i = 0; i < 2000000; i++) {
      if (i.isPrime()) {
         sum = sum + i;
      }
   }
   sysout(sum)
}

计算结果为1179908154,但这是不正确的。所以我将int更改为BigInteger,现在我得到了正确的总和142913828922。显然,int的范围已溢出。但是,为什么Java不能告诉我呢?(例如,例外)

吉姆·基利(Jim Kiley):

因为可以想到您可能希望它以传统的Integer方式运行。对于肯定且不可撤销的错误,保留例外。

ETA:根据语言规范:

“内置的整数运算符不会以任何方式指示上溢或下溢。唯一可以引发异常(第11节)的数字运算符是整数除法运算符/(第15.17.2节)和整数余数运算符%(§ 15.17.3),如果右侧操作数为零,则抛出ArithmeticException。”

http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当我告诉我不是正则表达式时,为什么这么贪婪?

当我明确告诉Heroku时,为什么不能识别正确的Java版本?

当我显示横向视图控制器时,为什么不能使用它呢?

当我明确处理Chrome时,为什么Chrome会告诉我我有未处理的拒绝?

当我使用 source 命令运行重新加载 bash 终端时,为什么我不能使用 && 链接命令?

为什么不能在bash脚本中使用〜符号告诉我答案

当我告诉Gradle运行Java 14时,为什么Gradle会尝试使用Java 8?

当我尝试推向起点时,为什么Git会告诉我“没有这样的远程'起点'”?

当我尝试在D3.js中使用filter函数时,它告诉我“ data.filter不是函数”。为什么?

谁能告诉我我的CSS文件出了什么问题?当我调用原色时,它不会显示在我的html中

为什么我不能使用asyncTask

为什么设置了PatternType后,EPPlus会告诉我“未设置patterntype时不能设置颜色”?

任何人都可以告诉我代码中缺少什么吗,我不能使用不和谐的用户名

pycharm告诉我我安装了一个软件包,但是我不能使用该pakege

有人想告诉我为什么使用pygame Vector时我的pygame代码滞后吗?

为什么我们在Java中使用String docType?还告诉我他们的优势?

谁能告诉我为什么当我更改填充时此列表消失了,而另一个却不消失?

为什么 NUnit 告诉我“没有提供足够的参数,至少提供 2 个参数。” 当我提供 2 个参数时?

每当我在任何按钮(即UISegmentedControl按钮)外单击时,该按钮也会被单击。谁能告诉我为什么会这样?

当我尝试 git remote remove origin 时,为什么 Git 会告诉我“错误:没有这样的远程 'origin'”?

为什么Chrome告诉我有警告消息,却不告诉我它们是什么?

为什么IntelliJ告诉我在这种情况下引用不能为空?

为什么这不能告诉我字符串向量多长时间?

谁能告诉我为什么这个无休止的 while 循环不能正常工作?

为什么Xcode告诉我在我可以做..rawValue时添加.map {$ 0.rawValue}?

谁能告诉我为什么我在针对xsd验证xml时出错?

为什么Powershell告诉我我需要。\

为什么MySQL Workbench告诉我我需要分号?

为什么我的IDE告诉我if语句是多余的?