在转换的情况下Java编译时错误

Ana*_*and 8 java

下面的代码给出了编译时错误类型不匹配:无法从int转换为byte

int i = 10;
byte b = i;
Run Code Online (Sandbox Code Playgroud)

但下面没有

 final int i = 10;
 byte b = i;
Run Code Online (Sandbox Code Playgroud)

我不明白为什么编译器在最终的情况下表现?

Kir*_*Koa 7

我认为这是因为10适合一个字节,但如果整数是超过8位的东西,那么它将无法正确地执行此分配.

编辑

为了澄清,使其成为最终允许编译器将int视为常量,以便它可以进行常量折叠.它可能会阻止使用非final int进行赋值,因为它在编译时不知道该值,并且它可能比字节可以容纳的值大.