下面的代码给出了编译时错误类型不匹配:无法从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)
我不明白为什么编译器在最终的情况下表现?
我认为这是因为10适合一个字节,但如果整数是超过8位的东西,那么它将无法正确地执行此分配.
编辑
为了澄清,使其成为最终允许编译器将int视为常量,以便它可以进行常量折叠.它可能会阻止使用非final int进行赋值,因为它在编译时不知道该值,并且它可能比字节可以容纳的值大.