2017-10-16 260 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,则第二个循环也将通过编译。

相关问题