2012-06-17 31 views
3

時,Java字節for循環不會停止運行我有此代碼可以運行但永不停止。當索引<128

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

有人可以向我解釋爲什麼它保持循環。

+1

因爲'byte'有簽字 –

回答

12

在Java中,byte只能在-128和127之間表示的值。這意味着,index每一個可能的值小於128,和環路不能與當前的狀態終止。當index達到127時,它只是溢出到-128,循環繼續。

有關Java整體類型的更多詳細信息,請參見JLS

+0

非常感謝。我會標記爲正確的。讓我困惑的一件事是在我的Java引用中,它說:「當在表達式中使用字節和短值時,在表達式被評估時它們被提升爲int。 – Alan2

3

字節是一個1字節的類型,所以條件i < 128始終爲真。 當你添加1到127時,它會溢出並變成-128,然後再次從那裏開始。這就是爲什麼你得到無限循環。

0

因爲它永遠不會達到128 ..字節只有最大值127 ..所以當127 + 1它將改變爲-128這是真的..所以它會一直循環..所以你需要改變從字節到int ..