2017-10-16 204 views
3

我試圖在for循環中使用字節作爲控制循環變量。 我使用的條件如正< 128(其中,128是出的字節的範圍)爲什麼Java沒有檢查字節的類型兼容性,因爲它與int一起死亡?

for (byte n =0; n < 128 ; n++) System.out.println("I am in For loop. "+ n); 

且環路從0到127無限去,然後-128到127

時,我試圖用int做同樣的事情。它給了錯誤。

for (int n = 0; n < 2147483648; n++) 

字面int類型2147483648超出範圍

爲什麼java的不檢查與字節類型兼容性喜歡它檢查的詮釋?

回答

3

n < 128 int比較發生; n傳播到一個int。然而,任何字節值作爲int小於128.而n ++溢出。

對於其他情況:

n < 2147483648L 

會被接受並引起了同樣的問題。

7

未針對循環變量的類型檢查類型兼容性。

沒有後綴的整型文字的類型始終爲int128是有效的int,所以第一個循環通過編譯,但導致數字溢出導致無限循環。

另一方面,2147483648不是有效的int,所以第二個循環沒有通過編譯。如果用long文字(2147483648L)替換2147483648,則第二個循環也將通過編譯。

相關問題