[英]java maximum value of int
从java文档中, int has a minimum value of -2,147,483,648 and a maximum value of 2,147,483,647 (inclusive)
。
我有一个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和抛出异常,因为2147483648
是不是在允许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
答案/提示将不胜感激。
根据我的知识++我应该将i的值递增1并抛出异常,因为int中不允许使用2147483648。
你的理解是不正确的。 整数算术在Java中以静默方式溢出。
从JLS第15.18.2节 :
如果整数加法溢出,则结果是数学和的低阶位,如某些足够大的二进制补码格式所示。 如果发生溢出,则结果的符号与两个操作数值的数学和的符号不同。
您遇到了一种称为整数溢出的情况: http : //en.wikipedia.org/wiki/Integer_overflow
这称为整数溢出 。 对整数值的算术运算永远不会抛出异常,这不仅仅是Java。
最小值和最大值仅用于确定int
是否足以进行计算。
我不会给出确切的答案,但请考虑一下:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.