意外的无休止字节循环
2022-09-01 06:18:33
我有以下循环:
for (byte i = 0 ; i < 128; i++) {
System.out.println(i + 1 + " " + name);
}
当我执行我的程序时,它会在无限循环中打印从-128到127的所有数字。为什么会发生这种情况?
我有以下循环:
for (byte i = 0 ; i < 128; i++) {
System.out.println(i + 1 + " " + name);
}
当我执行我的程序时,它会在无限循环中打印从-128到127的所有数字。为什么会发生这种情况?
byte 是 1 字节类型,因此可以在 -128...127 之间变化,因此条件 i < 128 始终为真。当您将1添加到127时,它会溢出并在(无限)循环中变为-128,依此类推...
在 127 之后,当它递增时,它将变为 -128,因此您的条件将不匹配 。
byte:数据类型为 8 位有符号二进制补码整数。它的最小值为 最大值(含)。数据类型可用于在大型数组中节省内存,其中节省内存实际上很重要。它们也可以用于代替它们的限制有助于澄清代码的地方;变量的范围是有限的这一事实可以作为一种文档形式。
byte
-128
127
byte
int
它的工作原理如下:
0, 1, 2, ..., 126, 127, -128, -127, ...
因为8位可以表示最多127的签名号码。
有关基元数据类型,请参阅此处。
图片胜过文字