黑马程序员技术交流社区

标题: 来,再玩一个,下面就发正经题目了 [打印本页]

作者: 杨_扬    时间: 2012-7-6 10:15
标题: 来,再玩一个,下面就发正经题目了
public class InTheLoop {
        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);
        }
}

来,猜运行结果吧
作者: 艾衍年    时间: 2012-7-6 13:39
亲,是不是这样的,Start和END之间相差100,所以不过Integer.MAX_VALUE,也就是END是多少,for循环都会执行100次,所以结果是100。
作者: 艾衍年    时间: 2012-7-6 13:42
所以不管Integer.MAX_VALUE,不是不过,…额,看到了吧,错别字
作者: 乐峰    时间: 2012-7-6 14:37
是死循环。
作者: 汤密奕    时间: 2012-7-6 22:40
是死循环哦,i<=END,END是int型的最大值,而i是int型,条件永远满足。。。
作者: 李志群    时间: 2012-7-6 23:38
这个人很坏!有电脑冒烟的没?{:soso_e103:}
作者: 曹恒业    时间: 2012-7-6 23:42
public class InTheLoop {
        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);
        }
}

死循环!
当 i 的值增加到Integer.MAX_VALUE时,此时 i 和END值相等,都是Integer.MAX_VALUE,然后count执行自增运算,此时count值为100;
接着 i 值自增,由于该值越界溢出,变成int中的最小值,所以再次判断循环条件依然满足,则循环继续,count继续自增;
i 的值继续从int的最小值自增到最大值,依此循环,成为死循环。


作者: 马林康    时间: 2012-7-7 01:39
哈哈 学习了
作者: 张凯    时间: 2012-7-7 09:38
public class InTheLoop {
         public static final int END = Integer.MAX_VALUE;//此题陷阱,END的值是int类型的最大值,是2的31次方减1
         public static final int START = END - 100;
         public static void main(String[] args) {
                 int count = 0;
                 for (int i = START; i<=END; i++){//定义i为整型,i永远都小于等于整型的最大值,因此条件一直满足,
                         count ++;//循环会一直下去。
                 }
                 System.out.println(count);
         }
}

这样循环将进入一个死循环,直到有一天你看到电脑冒烟了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2