public class Test {
public static final int END = Integer.MAX_VALUE;
public static final int START = END - 100; public static void main(String[] args) {
int count = 0;
for (int i = START; i <= END; i++)
count++;
System.out.println(count); }
}上面的代码,运行的结果出乎我的预料,可能是FINAL关键字的问题,请大家来帮我解释下,谢谢

解决方案 »

  1.   

    跟final无关,Integer.MAX_VALUE + 1 = Integer.MIN_VALUE, 死循环了。
      

  2.   

    是啊,有没有final都是死循环
      

  3.   

    原因是一个int,是不可能大于Integer.MAX_VALUE的,
    当到达Integer.MAX_VALUE之后继续加1,就会默认的变为Integer.MIN_VALUE,所以形成了无限循环。
      

  4.   

    Integer.MAX_VALUE+1变成Integer.MIN_VALUE
      

  5.   

    楼主把循环改成:   for (int i = START; i < END; i++)count的输出就是100了!跟final无关
      

  6.   


    public class test {
        public static final int END = Integer.MAX_VALUE;
        public static final int START = END - 100;    public static void main(String[] args) {
            int count = 0;
            for (int i = START; i <END; i++)
                count++;
           System.out.println(count);    }
    }这样没问题,说明在END+1的时候
    出问题了,楼上的正解!
      

  7.   

     
     public static final int END = Integer.MAX_VALUE;for (int i = START; i <= END; i++)注意这两行代码特别注意 i <= END; i++
      

  8.   


    public class Test {
        public static final int END = Integer.MAX_VALUE;
        public static final int START = END - 100;    public static void main(String[] args) {     System.out.println(START);
         System.out.println(END+1);
         System.out.println(END+1);
        }
    }输出结果为:
    2147483547
    2147483647
    -2147483648结论:当你程序中的循环变量 i由 START递增到END之后,再递增一次就变成-2147483648了,
    因为 i=-2147483648仍然满足循环条件i <= END ,所以会继续执行,如此反复,形成死循环。
    3楼正解!!
      

  9.   

    for里面出现死循环了,i不可能大于Integer.MAX_VALUE,所以出不来啊
      

  10.   

    当到达Integer.MAX_VALUE之后继续加1,就会默认的变为Integer.MIN_VALUE,所以形成了无限循环
      

  11.   

    你所说的莫名其妙可能是指一开始感觉好像没有任何动作,控制台也没有输出任何结果,这是因为你指定的for循环所耗时间太久,要执行完那个for循环要不少时间的,跟final变量没有任何关系,只要把那个循环的起始变量改变一下,让执行的循环次数减少(比如执行100次循环就好了)就可以了。