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