这是我上周给出的一篇文章中提出的一个问题,任何人都可以帮助我找出差异
public class TestClass {
static final int a = 2;
static final int b = 3;
static int c = 2;
static int d = 3;
public static void main(String[ ] args) {
int product1 = a * b; //line A
int product2 = c * d; //line B
}
}
答案 0 :(得分:9)
由于a
和b
被声明为final
,因此编译器可能会在线计算(计算在编译时完成)。请参阅Java Language Specification, section 15.28: Constant Expressions。 c
和d
不会发生这种情况;产品将始终在运行时计算。
答案 1 :(得分:6)
A行是在编译时计算的候选者,因为这些字段是最终的。 B行是在运行时计算的。
答案 2 :(得分:1)
我相信int product1 = a * b;将在编译期间计算,因为a和b被宣布为final。
答案 3 :(得分:0)
变量a
和b
是最终的,因此编译器会将变量a和b替换为行product = a * b
中的2和3