Java FAQ:static final の値は埋め込まれる

Java FAQ:S012 Q-05

ファイル1

class C2008050801 {
    static final int x = 1;
}

ファイル2

public class C2008050800 {
    public static void main(String[] args) {
        System.out.println(C2008050801.x);
    }
}

で、

1

ファイル1を変更しコンパイルしただけでは、実行結果が変わらない

javap -c を実行

Compiled from C2008050800.java
public class C2008050800 extends java.lang.Object {
    public C2008050800();
    public static void main(java.lang.String[]);
}

Method C2008050800()
   0 aload_0
   1 invokespecial #1 <Method java.lang.Object()>
   4 return

Method void main(java.lang.String[])
   0 getstatic #2 <Field java.io.PrintStream out>
   3 iconst_1
   4 invokevirtual #3 <Method void println(int)>
   7 return


final を外して javap -c を実行

Compiled from C2008050810.java
public class C2008050810 extends java.lang.Object {
    public C2008050810();
    public static void main(java.lang.String[]);
}

Method C2008050810()
   0 aload_0
   1 invokespecial #1 <Method java.lang.Object()>
   4 return

Method void main(java.lang.String[])
   0 getstatic #2 <Field java.io.PrintStream out>
   3 getstatic #3 <Field int x>
   6 invokevirtual #4 <Method void println(int)>
   9 return