意外的无休止字节循环

2022-09-01 06:18:33

我有以下循环:

for (byte i = 0 ; i < 128; i++) {
    System.out.println(i + 1 + " " + name);
}

当我执行我的程序时,它会在无限循环中打印从-128到127的所有数字。为什么会发生这种情况?


答案 1

byte 是 1 字节类型,因此可以在 -128...127 之间变化,因此条件 i < 128 始终为真。当您将1添加到127时,它会溢出并在(无限)循环中变为-128,依此类推...


答案 2

在 127 之后,当它递增时,它将变为 -128,因此您的条件将不匹配 。

byte:数据类型为 8 位有符号二进制补码整数。它的最小值为 最大值(含)。数据类型可用于在大型数组中节省内存,其中节省内存实际上很重要。它们也可以用于代替它们的限制有助于澄清代码的地方;变量的范围是有限的这一事实可以作为一种文档形式。byte-128127byteint


它的工作原理如下:

0, 1, 2, ..., 126, 127, -128, -127, ...

因为8位可以表示最多127的签名号码。

有关基元数据类型,请参阅此处


图片胜过文字 alt text