下面的代码给我编译时错误类型不匹配:无法从 int 转换为字节
int i = 10;
byte b = i;
但下面没有
final int i = 10;
byte b = i;
我不明白为什么编译器会在 final 的情况下运行?
最佳答案
我认为这是因为 10 适合一个字节,但如果整数是占用超过 8 位的东西,那么它将无法再正确地执行此分配。
编辑
澄清一下,将其设置为 final 允许编译器将 int 视为常量,以便它可以进行常量折叠。它可能会阻止使用非最终 int 进行赋值,因为它在编译时不知道该值,并且它可能比一个字节可以容纳的值大得多。
关于强制转换时的 Java 编译时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12203019/