下面的代码如何显示“ J的值为:1000”?
我本以为“ j!= 1000”在所有情况下都将评估为false(因为1000 mod 19不是0),因此使其成为无限循环。
public static void loop2() {
int j = 0;
for(int i=0;j != 1000;i++) {
j = j+19;
}
System.out.println("The value of J is: " + j);
}
答案 0 :(得分:1)
正如Saheb所说,由于整数溢出。
在3842865528迭代之后达到J的值1000
public static void loop2()
{
int j = 0;
long iterations = 0;
for (int i = 0; j != 1000; i++) {
j = j + 19;
iterations++;
}
System.out.println("The value of J is: " + j + " reached after " + iterations + " iterations");
}
答案 1 :(得分:0)
您将j定义为int。 整数具有定义的范围。有符号整数的最大值为2,147,483,647。一旦超过该值,就会出现位溢出,导致整个事情从最小值开始。如果是整数,则为-2,147,483,648。在循环的某个点上,您会得到一个负的循环起始值,该起始值会导致您的循环降落在981 + 19 = 1000 >>>循环退出,因为J等于您的for循环的退出条件。>