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: 定数式を参照してください。cand d;ではそうはなりません。積は常に実行時に計算されます。

于 2013-09-12T07:05:52.053 に答える
6

行 A は、フィールドが final であるため、コンパイル時に計算される候補です。行 B は実行時に計算されます。

于 2013-09-12T07:06:00.010 に答える
1

私は int product1 = a * b; と信じています。a と b は final として宣言されているため、コンパイル自体で計算されます。

于 2013-09-12T07:08:59.057 に答える
0

変数ab最終的なものであるため、コンパイラは変数 a と b を行の 2 と 3 に置き換えます。product = a * b

于 2013-09-12T07:08:20.710 に答える