来自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
is -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应该将i的值增加1并引发异常,因为int中不允许2147483648。
您的理解不正确。整数算法在Java中无提示地溢出。
如果整数加法溢出,则结果是数学和的低阶位,以某种足够大的二进制补码格式表示。如果发生溢出,则结果的符号与两个操作数值的数学和的符号不同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句