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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 米老鼠 中级黑马   /  2015-10-22 00:34  /  839 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class test {

public static void main(String[] args) {
int count=0;
while(count<5)
{
System.out.println(count);
count--;
}
System.out.println("right");
}
}


我一直觉得这个应该是应该有有尽头的,因为count的类型的是int,也就是说最小只能到-32767就结束了,但是为什么会出现死循环呢?一直没有想明白,我用电脑试过了,的确是死循环,但是心理上还是过不去,难道这是java不够科学的地方,各位大牛帮忙解答一下可以吗?

14 个回复

倒序浏览
好像是会从int最小值负的那个值直接跳到int的最大值再继续减减,如此这样一个死循环,我也拿不太准
回复 使用道具 举报
不是死循环的,应该是你没看到最后
  1. // int的取值范围:-2147483648 ~ 2147483647
  2.                 int count = -2147483000;
  3.                 while (count < 5) {
  4.                         System.out.println(count);
  5.                         count--;
  6.                 }
  7.                 System.out.println("right");
复制代码

最后会输出right的。
回复 使用道具 举报
换成short试试?
回复 使用道具 举报
你所说的到-32767count类型应该是short。short的取值范围是-32768-32767之间。而你程序中的count类型是int,就像前面一个兄弟说的那样取值范围-2147483648 ~ 2147483647太大了。所以你一直以为是死循环。
回复 使用道具 举报
2楼四楼正解!
回复 使用道具 举报
polarfox17 发表于 2015-10-22 01:46
好像是会从int最小值负的那个值直接跳到int的最大值再继续减减,如此这样一个死循环,我也拿不太准 ...

从负转正如此循循环环下去?
回复 使用道具 举报

明白了  谢谢大神
回复 使用道具 举报
朦胧色彩 发表于 2015-10-22 08:44
不是死循环的,应该是你没看到最后

最后会输出right的。

谢谢abcdef
回复 使用道具 举报
Manper 发表于 2015-10-22 10:20
你所说的到-32767count类型应该是short。short的取值范围是-32768-32767之间。而你程序中的count类型是int ...

恩恩,知道了
回复 使用道具 举报
你就每次都输出count的值看看不就知道咯
回复 使用道具 举报
没有死循环哦,int的取值范围是-2^31~2^31-1,只不过这个值有点大。
回复 使用道具 举报

这个真的是从最小的负数然后直接跳到最大的正数再继续减减的嘛?
回复 使用道具 举报
费斯 中级黑马 2015-10-23 16:20:55
14#
学到了!!
回复 使用道具 举报
你可以运行这段代码看一下,打印的结果是2147483647,和二楼说的一样。
public class IntRange {

        public static void main(String[] args) {
                int a = -2147483648;
                System.out.println(a-1);
        }

}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马