循环的Java字节赢了';当索引<;128

循环的Java字节赢了';当索引<;128,java,byte,Java,Byte,我有一段代码可以运行,但不会停止 class A { public static void main(String[] args) { for (byte index = 0; index < 128; index++) { System.out.println(index); } } } A类{ 公共静态void main(字符串[]args){ 用于(字节索引=0;索引

我有一段代码可以运行,但不会停止

class A {
   public static void main(String[] args) {
      for (byte index = 0; index < 128; index++)
      {
          System.out.println(index);
      }
   }
}
A类{
公共静态void main(字符串[]args){
用于(字节索引=0;索引<128;索引++)
{
系统输出打印项次(索引);
}
}
}

有人能给我解释一下为什么它一直在循环吗

在Java中,
byte
只能表示-128到127之间的值。这意味着
索引
的每个可能值都小于128,循环不能以当前条件终止。当
索引
达到127时,它只会溢出到-128,循环继续进行


有关Java整数类型的更多详细信息,请参阅。

字节是1字节类型,因此条件i<128始终为真当您将1添加到127时,它会溢出并变为-128,然后再次从那里开始。这就是为什么您会得到无限循环。

因为它永远不会达到128。。字节的最大值仅为127。。所以当127+1时,它将变为-128,这是真的。。所以它总是会再次循环。。所以您需要将字节更改为int..

非常感谢。我会记为正确。让我困惑的一件事是,在我的Java引用中,它说“当在表达式中使用字节和短值时,它们在表达式求值时被提升为int”。因为
byte
是signedHi,为什么?它不会溢出并停止,对吗?为什么会这样循环?谢谢Vipul