为什么这个循环会无限运行?

3
class kk{
    public static void main(String args[]){
        int n=0;
        for (byte i = 0; i<=255; i++) 
        { 
             n++;
        }
        System.out.println(n);
    }
}

上述的for循环会无限执行。如果有人能够解释原因,我将不胜感激。

1
除了下面的答案之外,值得注意的是,在生成的字节码中,您的“byte”变量实际上将在很大程度上被视为“int”,因此在这里使用“byte”既不会提高速度也不会消耗内存。 - Louis Wasserman
2
@LouisWasserman:确实,使用字节会更慢,操作是通过 ILOAD 1ICONST_1IADD 进行的,然后将结果转换回字节以通过 I2B 存储。因此,甚至存在不必要的操作码。 - Jack
3个回答

9
因为Java中任何数字值默认都是有符号的。因此,一个byte可以存储范围在[-128, 127]内的值,这个范围总是满足你for循环的条件。当i等于127时,将1加到i上会把它变成-128。

4

This

for (byte i = 0; i<=255; i++)

这是一个无限循环,因为i将永远小于等于<= 255

由于Java的byte是有符号的,它们的值可以从-2^8(即-128)到(2^8)-1(即127)。

一旦i达到127,加上1将使它变成-128,这显然小于255。因此,这个循环将永远运行下去。


2

因为字节值的范围是[-128, 127]

因此,当字节值为127时增加它会溢出到-128,导致您的循环无限继续。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接