为什么Java没有检查字节的类型兼容性,因为它死于int?

Aji*_*kya 3 java int primitive byte for-loop

我试图在for循环中使用byte作为控制循环变量.我使用条件为n <128(其中128超出字节范围)

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

并且循环无限地从0到127然后-128到127.

当我尝试用int做同样的事情.它给出了错误.

for (int n = 0; n < 2147483648; n++)
Run Code Online (Sandbox Code Playgroud)

int类型的文字2147483648超出范围

为什么java没有检查类型与Byte的兼容性,就像检查Int一样?

Era*_*ran 7

不会根据循环变量的类型检查类型兼容性.

始终是没有后缀的整数文字的类型int.128是有效的int,所以第一个循环通过编译但导致数字溢出导致无限循环.

另一方面,2147483648它不是有效的int,所以第二个循环不通过编译.如果替换2147483648longliteral(2147483648L),则第二个循环也将通过编译.