4

这是我上周写的一篇文章中提出的一个问题,任何人都可以帮助我找出差异

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
    }
}
4

4 回答 4

9

由于ab被声明final,编译器有可能内联计算(计算在编译时完成)。请参阅Java 语言规范,第 15.28 节:常量表达式cd;不会发生这种情况 产品将始终在运行时计算。

于 2013-09-12T07:05:52.053 回答
6

行 A 是在编译时计算的候选,因为字段是最终的。B 行是在运行时计算的。

于 2013-09-12T07:06:00.010 回答
1

我相信 int product1 = a * b; 将在编译期间计算,因为 a 和 b 被声明为 final。

于 2013-09-12T07:08:59.057 回答
0

变量ab是最终的,因此编译器将在行中用 2 和 3 替换变量 a 和 bproduct = a * b

于 2013-09-12T07:08:20.710 回答