Geo*_*lev 9 java final variable-assignment
据我了解,变量评估是在运行时完成的。但是,类型评估是在Java中的编译时完成的。
同样,正如我所见,使变量恒定(我正在使用局部变量,但是上面的概念没有改变),将在编译时知道其值。
我提供了两个示例来测试这个概念。第一个起作用,第二个不起作用。
有人可以向我解释为什么将变量设为常量可以使我将短变量分配给int变量,而不能将int变量分配给long吗?
// Working example
final int x = 10;
short y = x;
// Non-working example
final long a = 10L;
int b = a;
Run Code Online (Sandbox Code Playgroud)
And*_*ner 15
语言规范的相关部分是JLS 5.2,分配上下文:
另外,如果该表达式是字节,short,char或int类型的常量表达式(第15.28节):
- 如果变量的类型为byte,short或char,并且常量表达式的值可以表示为变量的类型,则可以使用缩窄的原始转换。
使用a
和x
变量final
使它们成为常量表达式(因为它们也使用常量值进行了初始化)。
第一个示例之所以有效,x
是因为int
您尝试将其分配给short
变量,并且该值可以用表示short
;第二个示例不是因为它x
是一个常量long
,而是试图将其分配给一个int
变量(该值是可表示的,但这无关紧要,因为它已经不符合隐式变窄转换的资格)。
归档时间: |
|
查看次数: |
223 次 |
最近记录: |