Java 预期此循环是无限的,但不是无限的

Java 预期此循环是无限的,但不是无限的,java,Java,以下是我的Java代码: public class Prog1 { public static void main(String[] args) { int x = 5; while (x > 1) { x = x + 1; if (x < 3) System.out.println("small x"); } } } 我期待一个无

以下是我的Java代码:

public class Prog1 {
    public static void main(String[] args) {
        int x = 5;
        while (x > 1) { 
            x = x + 1;
            if (x < 3)
                System.out.println("small x");   
        }
    }
}

我期待一个无限循环。。。知道它为什么会这样吗?

有一个无限循环。就在一段时间内,x得到的比特数超过了有符号整数的极限,它变成了负数

public class Prog1 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int x = 5;
        while (x > 1) { 
            x = x + 1;
            System.out.println(x);
            if(x < 3)
                System.out.println("small x");   
        }
    }
}
公共类程序1{
/**
*@param args
*/
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
int x=5;
而(x>1){
x=x+1;
系统输出println(x);
if(x<3)
System.out.println(“小x”);
}
}
}

X超出了int的限制。请通过为X添加println语句来检查该值

public static void main(String[] args) {
// TODO Auto-generated method stub
int x = 5;
while (x > 1) { 
    x = x + 1;
    if(x < 3){
        System.out.println(x);
        System.out.println("small x");   
    }
}
publicstaticvoidmain(字符串[]args){
//TODO自动生成的方法存根
int x=5;
而(x>1){
x=x+1;
if(x<3){
系统输出println(x);
System.out.println(“小x”);
}
}

我的jvm显示x为-2147483648

x从5开始。然后循环到6、7、8等等。最终它达到可能的最大整数。下一个x=x+1将其设置为最负整数,负20亿。这小于3,因此消息被输出。然后再次执行while条件,现在失败,退出lo作品

因此,虽然它看起来是一个无限循环,但实际上并非如此


这是一个家庭作业问题吗?你为什么要写这么奇怪的代码呢?

Java整数是有符号的,它们会溢出(就像在C和许多其他语言中一样)。 尝试以下方法检查此行为:

public class TestInt {
   public static void main(String[] args) {
     int x = Integer.MAX_VALUE;
     System.out.println(x);
     x++;
     System.out.println(x);
   }
}
public class TestInt {
   public static void main(String[] args) {
     int x = Integer.MAX_VALUE;
     System.out.println(x);
     x++;
     System.out.println(x);
   }
}