与在Java中使用final相比,如果我没有将变量声明为final,那么计算的差异是什么?

时间:2013-09-12 07:02:33

标签: java

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

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 个答案:

答案 0 :(得分:9)

由于ab被声明为final,因此编译器可能会在线计算(计算在编译时完成)。请参阅Java Language Specification, section 15.28: Constant Expressionscd不会发生这种情况;产品将始终在运行时计算。

答案 1 :(得分:6)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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