class kk{
public static void main(String args[]){
int n=0;
for (byte i = 0; i<=255; i++)
{
n++;
}
System.out.println(n);
}
}
上面的 for 循环无限地进行。如果有人能回答为什么,我将不胜感激?
class kk{
public static void main(String args[]){
int n=0;
for (byte i = 0; i<=255; i++)
{
n++;
}
System.out.println(n);
}
}
上面的 for 循环无限地进行。如果有人能回答为什么,我将不胜感激?
因为默认情况下 Java 中的任何数值都是有符号的。
所以 abyte
在 range 中保存值[-128, 127]
,一个始终满足for
循环条件的范围。任何时候i == 127
,加进去1
就i
变成了-128
。
这
for (byte i = 0; i<=255; i++)
是一个无限循环,因为i
将永远是<= 255
.
由于 Javabyte
是有符号的,它们的值范围可以从-2^8
(is -128) 到(2^8)-1
(is 127)。
一次i
是127,加一会变成-128,明显小于255
。所以这个循环将永远运行。
[-128, 127]
.因此,当字节 127 递增时,它会溢出到 -128,并且您的循环会无限期地继续。