为什么整数数据类型会以静默方式溢出而不是抛出异常

Sye*_*hiq 6 java integer integer-overflow long-integer

我已经学会了(至少在java中)整数/长值静默地溢出,它们的值从溢出时的最小值开始而不是抛出任何异常.

我正在使用外部api进行某些文件操作,其中从文件属性加载最大文件大小.在我当地的测试环境中一切都很好.代码进入实时环境后,最大文件大小限制根本不起作用.经过两天调试/分析代码后,根本没有成功.然后由于其他原因,我采用了live constants.properties文件并用它调试了代码.O_0

我只想问,是什么阻止他们在溢出时抛出异常?

Pet*_*rey 5

在许多情况下,Java基于C或C++,它们基于Assembly.溢出/下溢在C和C++中是静默的,在汇编时几乎是静默的(除非您检查特殊标志).这可能是因为C和C++在首次提出时没有例外.如果你想看到溢出/下溢,你只需使用更大的类型.例如long long intlong double;)BTW组件有类似于称为陷阱或中断的异常,溢出/下溢不会导致陷阱AFAIK.

我喜欢做的是使用long,double除非我确定这些类型比需要的要大得多.您不能拥有long大小溢出的设备.

  • 这些陈述很容易!;)记住"640KB应该对任何人都足够"?`long`可以描述最多大约9 Exa-Byte的文件/卷大小.谷歌目前不仅在这个范围内的某个地方运行,而且目前的4TB硬盘也只有200万.比我们心爱的3.5英寸软盘低两百万,这个软盘曾经是25年前的标准数据载体......所以,在另一个25年代,标准相机的单个Super-XUHD视频可能很容易破坏你的应用程序.:) Java也可能存活很长时间...... Fortran和C都有. (3认同)