为什么Java没有检查byte与int的类型兼容性?

为什么Java没有检查byte与int的类型兼容性?,java,for-loop,int,byte,primitive,Java,For Loop,Int,Byte,Primitive,我试图在for循环中使用byte作为控制循环变量。 我使用的条件是n

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

for(字节n=0;n<128;n++)System.out.println(“我在for循环中。”+n);
循环从0到127,然后从-128到127,是无限的

当我尝试对int做同样的操作时,它给出了错误

for (int n = 0; n < 2147483648; n++)
for(int n=0;n<2147483648;n++)
int类型的文字2147483648超出范围


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

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

不带后缀的整数文本的类型始终为
int
128
是有效的
int
,因此第一个循环通过编译,但会导致数值溢出,导致无限循环


另一方面,
2147483648
不是有效的
int
,因此第二个循环无法通过编译。如果将
2147483648
替换为
long
文本(
2147483648L
),则第二个循环也将通过编译。

n<128
进行整数比较;n被传播到一个int。但是,作为int的任何字节值都小于128。和n++溢出

对于另一种情况:

n < 2147483648L
n<2147483648L
会被接受并导致同样的问题

n < 2147483648L