gpt4 book ai didi

c# - java : why there are no exceptions at run time and no compiler warnings? 中的 Arith 溢出

转载 作者:搜寻专家 更新时间:2023-11-01 01:55:55 26 4
gpt4 key购买 nike

我知道这个问题已经得到了部分回答 here on S.O. ,但他们在那里解释了算术溢出期间发生的什么。在 S.O. 的其他地方他们解释 how to check for overflow在 java 代码中,即防止它作为程序员。

这里我要问的是为什么在运行时没有异常,也没有编译器警告

AFAIK,以前没有回答过这个问题。

在 Bruce Eckel 的书中 Thinking in Java ,第一版。 (2000),第 3 章,有这个小 java 程序:

//: Overflow.java
// Surprise! Java lets you overflow.
public class Overflow {
public static void main(String[] args) {
int big = 0x7fffffff; // max int value
prt("big = " + big);
int bigger = big * 4;
prt("bigger = " + bigger);
}
static void prt(String s) {
System.out.println(s);
}
} ///:~

The output of this is:

big = 2147483647
bigger = -4

and you get no errors or warnings from the compiler, and no exceptions at run-time.

当使用 Integer.MAX_VALUE 而不是“0x7fffffff”时没有变化

我已经在 1.2 到 1.6 的一些 Java 编译器上试过了,它仍然显示这种行为。我现在想知道为什么会这样?

  • 这是错误还是功能?
  • 这是无法检测到的,还是编译器设计者的低优先级问题?
  • 这不是因为向后兼容而修复的吗?
  • 也许在较新版本的 JDK 中,是否可以通过启用一些很少使用的编译器开关/-D:property 或一些 Java VM 参数 (-XX:...) 在编译时控制这一点?

刚才我使用了这些虚拟机,Windows x86 32 位

Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode, sharing)

Java(TM) SE Runtime Environment (build 1.7.0_03-b05)
Java HotSpot(TM) Client VM (build 22.1-b02, mixed mode, sharing)


顺便说一句,C# (Microsoft.CSharp\v4.0_4.0.0.0) 显示相同的行为

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OverflowCheck
{
class Overflow
{
static void Main(string[] args)
{
int big = 0x7fffffff; // same behaviour vor Int32.MaxValue
prt("big = " + big);
int bigger = big * 4;
prt("bigger = " + bigger);
prt("done");
}
static void prt(String s) {
System.Console.WriteLine(s);

}
}
}

输出:

big = 2147483647
bigger = -4

最佳答案

语言规范要求溢出计算的环绕行为,因此这是一项功能。由于大多数溢出无法在编译时检测到,因此检查那些可以检测到的溢出具有可疑的值(value),特别是因为它们可能是故意的。

关于c# - java : why there are no exceptions at run time and no compiler warnings? 中的 Arith 溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9348510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com