java - 编译时间常数如何在java内部工作
问题描述
我的问题是编译时间常数在内部是如何工作的,所以我们在下面的语句中没有得到错误。
final int a = 10;
byte b = a;
以及为什么我在此声明中出现错误。
int a = 10;
byte b = a;
解决方案
这是因为并非所有整数都适合一个字节。
在您的第一个示例中, 的值a
是已知的并且不能更改。编译器知道它将适合一个字节。
在您的第二个示例中,因为a
不是最终的,所以它可能已经更改(尽管在您的示例中没有)。Java 编译器不够聪明,无法注意到没有任何改变,因此不再确定它是否适合一个字节。
例如,看看这个:
final int a = 10000;
byte b = a;
因为a
现在的值太大而无法放入 int,所以它不再编译。