A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 刁镜元 于 2013-8-15 21:03 编辑

class Demo6{
        public static void main(String[] args){        
                int x =1;
                while(true){
                        if(x<10){
                                System.out.println(x);
                        }
                        x++;
                }
        }
               
}
编译执行,JVM为什么在停顿几秒后疯狂打印,这难道是传说中的bug?
求一合理解释

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

6 个回复

倒序浏览
因为你这个程序是个死循环,在循环中x++这句代码是每一次循环都要执行的,所以当打印1-------9后,x仍在不断的进行++,而计算机的执行速度是非常快的,间隔了一会x的值已经被自动加至int型值可以存储的最大正整数值2147483641(int型的表示范围为:2147483641~-2147483648),此时将发生数据错误,在内存中数据经过进位后将正好变成整形所能表示的负数最小值,此时就又满足了x<10 的条件,所以此时会打印负数,并且是从-2147483648开始打印的。楼主可以可以仔细看看打印的数就会明白了。
回复 使用道具 举报
楼主的while(true)是一个死循环,在java中,用二进制的最高位来表示数值的正负,0为正,1为负。int类型的取值范围是(-2^32到2^32-1),当x的值达到最大值的时候再自增一次就会得到int最小值,即-2147483648(-2^32),满足x<10的条件,所以会继续输出。
可以让线程打印前休眠1秒钟查看打印结果。
代码如下:
  1. class Demo6
  2. {
  3.         public static void main(String[] args) throws Exception
  4.         {
  5.                 int x = 1;
  6.                 while (true)
  7.                 {
  8.                         if (x < 10)
  9.                         {
  10.                                 Thread.sleep(1000);
  11.                                 System.out.println(x);
  12.                         }
  13.                         x++;
  14.                 }
  15.         }

  16. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
循环语句没有结束语句,你不把机子烧了还想干嘛
回复 使用道具 举报

亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~


保持队形,谢谢合作
回复 使用道具 举报
薛鹏鹏 发表于 2013-8-15 10:32
亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~

不好意思,白天上课,教室没网。晚上回来才看到
回复 使用道具 举报
同桌一起加油!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马