【发布时间】:2019-10-26 22:25:11
【问题描述】:
据我了解,变量评估是在运行时完成的。然而,在 Java 中,类型评估是在编译时完成的。
正如我所见,将变量设为常量(我使用的是局部变量,但对上述概念没有任何改变),将在编译时使其值已知。
我提供了两个例子来测试这个概念。第一个有效,第二个无效。
有人可以向我解释为什么将变量设为常量允许我将短变量分配给 int 变量,而我不能将 int 变量分配给 long?
// Working example
final int x = 10;
short y = x;
// Non-working example
final long a = 10L;
int b = a;
【问题讨论】:
-
您不能将 int 设为 long。反之亦然。这与
final-声明无关。final只表示你不能改变它,它是一个常数 -
没有从
long到int的隐式转换。您需要为分配进行显式转换。 -
@AdrienBrunelat 如果您要回答,请回答我提出的问题。我很清楚不能。我也不能将 int 分配给 short ,不是吗?然而,让它成为最终的(第一个例子)让它工作?!为什么第一个有效而第二个无效。我问的问题很简单。
-
@John 你只对了一半。您的陈述在引用变量方面是正确的,但在原语上它也使它在编译时可见。那么为什么我不能将 10 分配给 int ,因为编译器认为它是 10?
-
@GeorgiVelev 我想我第一次看错了你的问题,但安迪的回答澄清了我的想法。
标签: java variable-assignment final