簡體   English   中英

為什么在while循環中遞增int原語不會永遠循環

[英]Why incrementing int primitive in while loop does not loop forever

我有以下代碼示例

int i = 1;  

while(i != 0) {  
    i++;  
} 

我期待這個在無限循環中運行,但事實並非如此。 然后,當我在while循環后打印值時,我得到了:

i value is 0.  

誰能告訴我究竟發生了什么?

我期待這個在無限循環中運行,但事實並非如此。

不,它不會。 最終該值將再次變為0。

特別是,它將在邏輯上執行如下:

1
2
3
...
2,147,483,646
2,147,483,647  
-2,147,483,648  // Integer overflow => wrapping
-2,147,483,647
...
-3
-2
-1
0

...然后循環結束

JLS第15.18.2節

如果整數加法溢出,則結果是數學和的低階位,如某些足夠大的二進制補碼格式所示。 如果發生溢出,則結果的符號與兩個操作數值的數學和的符號不同。

此代碼沒有內存問題,因為它不執行任何分配 - 它只是增加一個局部變量,完全在堆棧上。

現在它是否真的這樣做是另一回事 - 如果JIT能夠在不執行每次迭代的情況下計算出行為將會是什么,它可以優化它 - 但這是一個實現細節。 重要的是要理解行為背后的邏輯。

intint :對於每個i ,如果iint那么i+1 int總是32位,它永遠不需要更大的容器。

最后,你的循環不是無限的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM