转换时出现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;
(因为i
是final
),所以没有错误
尝试这个
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?