当索引小于128时,Java字节循环不会停止运行。

3

我有一段代码,它可以运行但从不停止。

class A {
   public static void main(String[] args) {
      for (byte index = 0; index < 128; index++)
      {
          System.out.println(index);
      }
   }
}

有人能解释一下为什么它一直循环吗?


1
因为 byte 是有符号的。 - Ed S.
2个回答

12
在Java中,byte只能代表-128至127之间的值。这意味着index的每个可能值都小于128,因此循环无法使用当前条件终止。当index达到127时,它会简单地溢出到-128并继续执行循环。
有关Java的整数类型的更多详细信息,请参见JLS

非常感谢。我会标记为正确的。有一件事让我困惑,在我的 Java 参考资料中它说:“当字节和短整型的值在表达式中使用时,它们在表达式被评估时被提升为 int 类型”。 - Alan2

3

byte是一种1字节类型,因此条件i<128始终为真。当你将127加1时,它会溢出并变成-128,然后再从那里开始。这就是你得到无限循环的原因。


嗨,为什么?它不可能溢出并停止,对吧?为什么它会以那种方式循环?谢谢Vipul。 - Mike

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