转换时出现Java编译时错误

下面的代码给我编译时错误类型不匹配:不能从int转换为字节

int i = 10;
byte b = i;

但下面没有

 final int i = 10;
 byte b = i;

我不明白为什么编译器会在最终的情况下运行?


我认为这是因为10适合于一个字节,但如果整数是需要多于8位的东西,那么它将无法再正确地完成这项任务。

编辑

为了澄清,最终让编译器将int视为一个常量,以便它可以进行不断的折叠。 它可能会阻止非最终int的赋值,因为它在编译时不知道该值,并且可能比字节可以保存的值大。


情况1:编译错误,因为int可能不适合一个byte ; 明确的演员是必要的
情况2:编译器将第二个语句编译为byte b = 10; (因为ifinal ),所以没有错误


尝试这个

int i=45;
final int j=i;
byte b=j;

与此比较

final int j=56;
byte b=j;

这将给你一个想法如何隐式缩小int到字节发生,即它只发生如果赋值是一个常量表达式

链接地址: http://www.djcxy.com/p/73627.html

上一篇: Java compile time error in case of casting

下一篇: Why is "throw null" not creating a compilation error in Java?