这是我的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");
}
}
}
这是输出:
small x
我期待一个无限循环...任何想法为什么它会这样表现?
答案 0 :(得分:6)
有一个无限循环。就在某个时候,x得到了一点,它溢出了一个有符号的int的限制,并且它变为负数。
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 :(得分:4)
x从5开始。然后当你循环时,它会转到6,7,8等。最终它会达到最大可能的int。下一个x = x + 1将其设置为最负的int,负20亿 - 无论如何。这小于3,因此输出消息。然后再次执行while条件,现在失败,退出循环。
所以虽然它似乎是一个无限循环,但事实并非如此。
这是作业问题吗?你为什么要编写这样奇怪的代码?
答案 2 :(得分:1)
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");
}
}
我的jvm将x显示为 -2147483648
答案 3 :(得分:1)
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);
}
}