Java中int类型的最大值是多少?

4

根据Java文档:int类型的最小值为-2,147,483,648,最大值为2,147,483,647(包括边界)。

我有一个名为Test.java的类。

public class Test
{
    public static void main(String[] args)
    {
        int i=2147483647; //max positive value an int can store
        for(;;)
        {
            System.out.println(++i);
        }
    }
}

据我所知,++i应该将i的值增加1并抛出异常,因为在int中不允许使用2147483648。但是当我运行上述程序时,它会一直运行下去(因为是无限循环),而且将i的值赋为-2147483648,每次减少1。以下是修改后的程序运行示例:
public static void main(String[] args)
{
    int i=2147483647;
    for(;;)
    {
        System.out.println(++i);
        System.out.println(++i);
        System.out.println(++i);
        System.out.println(++i);
        System.out.println(++i);
        break;
    }
}

输出:

-2147483648
-2147483647
-2147483646
-2147483645
-2147483644

欢迎提供答案或提示。

5个回答

13
根据我的了解,++i应该将i的值增加1并抛出异常,因为在int中不允许2147483648。
您的理解是错误的。在Java中,整数运算会静默地溢出。
来自JLS的15.18.2节
如果整数相加溢出,则结果是以某个足够大的二进制补码格式表示的数学和的低位比特。如果发生溢出,则结果的符号与两个操作数值的数学和的符号不同。

4

2

这被称为整数溢出。对整数值进行算术运算时从不引发异常,这并不仅限于Java。

最小值和最大值只能用来确定一个 int 是否足够进行计算。


2

我不会给出确切的答案,但请考虑以下内容:

  • Java中整数是如何表示的(采用哪种二进制数表示)?
  • 如果将1加到最高可能的二进制数上会发生什么?

2

在Java中,数值的下溢和上溢是关闭的(静默的)。在发生下溢和上溢事件时,Java会继续递增/递减数值范围。

第4.2.2节 整数运算

整数运算符没有以任何方式指示溢出或下溢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接