java循环中错误

hwy1782 百度(中国)技术有限公司 开发组长/高级工程师/技术专家  2009-03-29 05:03:22
package test;

public class ThreadTest_1 extends Thread{
int count=10;
public void run()
{
while(true)
{
count--;
if(count>0)
{
try{
Thread.sleep(1000);
}catch(Exception e)
{
e.printStackTrace();
}
System.out.println("pig"+count--);

}
}
}
public static void main(String arg[])
{
ThreadTest_1 t=new ThreadTest_1();
t.start();
}
}



结果很奇怪:
pig9
pig7
pig5
pig3
pig1

中间可能有一两秒钟,后面就出现下面的值

pig2147483647
pig2147483645
pig2147483643
pig2147483641
pig2147483639
pig2147483637
……


这是为什么啊?
...全文
48 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ghostgant 2009-04-02
int 值 的越界
LZ 要注意了,很危险的,
容易造成系统崩溃
回复
xiguagege 2009-03-30
[Quote=引用 1 楼 huguang 的回复:]
java中int 类型的范围是:-2147483648 到2147483647好像
你看你的程序,只有count>0才sleep
也就是count--成小于0的数,就是while(true)的循环,而且没有sleep,
会很快在负数越界,count <-2147483648
就会变成count==2147483647
所以你的count>0又会成立,继续sleep并打印输出
[/Quote]
在下面的代码间每次都将count的值打印出来看看
count--;
if(count>0)
回复
Study_Work_2009 2009-03-30
up
回复
tianpan000 2009-03-30
值的越界
回复
heavilyarmed 2009-03-30
看看
回复
huguang 2009-03-29
java中int 类型的范围是:-2147483648 到2147483647好像
你看你的程序,只有count>0才sleep
也就是count--成小于0的数,就是while(true)的循环,而且没有sleep,
会很快在负数越界,count<-2147483648
就会变成count==2147483647
所以你的count>0又会成立,继续sleep并打印输出
回复
发帖
Eclipse
创建于2007-09-28

5.8w+

社区成员

Java Eclipse
申请成为版主
帖子事件
创建了帖子
2009-03-29 05:03
社区公告
暂无公告