定数はコンパイル時にclassファイルに展開されたりされなかったりする話
Javaで定数を使用しているとき、classファイル生成時に定数はインライン展開されます。
例えばこんなの
public class Const{
public static final String STR_A = "AAA”;
}
public static class Hoge{
system.out.println(Const.STR_A);
}
これをコンパイルすると、実際のclassファイルではこんな感じになっている
public static class Hoge{
system.out.println(”AAA");
}
これを見て、「おっ、つまりstaticでfainalなフィールドは全部インライン展開されるんだな」と思っていたんだけど、そうではない。
public class Const{
public static final int[] ARRAY_A = {0,1,2,3}
}
public class Hoge{
system.out.println(Const.ARRY_A[1]);
}
こんなプログラムがあったとして、コンパイルしたときにHogeクラスが
system.out.println(1);
とかになってると思いきや、実際は
public class Hoge{
system.out.println(Const.ARRY_A[1]);
}
配列の場合は展開されません。
っていうのを先週知りました。