質問: 0 int getA(){ return Test.A; } } 例1が、一般的なコーディングだと認識しています。 しかしながら、例2の手法を取ればint型1つ分のメモリが浮くのではないかという疑問があります。 例1と例2の実際の違いを、メモリや処理速度などの観点からご教示ください。
回答: 質問者です。 すいません、一般的な、ということに関しては完全にこちらの勝手な思い込みで言ってしまいました。 私は経験が浅いことを追記させていただきます。 特に、定数をそもそもどうやって組み込むべきなのかという常識が欠けているかもしれません。 折角ですので、一般的なコードも教えていただきたいのですが、そもそもどういった目的のコードなのかを端的に言語化することができません。 上記のコードが一般的でないことは置いていただき、このコードで実装したと仮定した場合に、 ・例1でgetA()を実行する場合の速度と例2でgetA()を実行する速度の差 ・例1と例2で実際にメモリの消費量が変わるのか を教えていただくだけでも助かります。 以下は今回の質問が生まれた発端ですが、私の知識不足もあり、更に混乱させてしまう可能性があります。 私としては書くにこしたことはないと思い書きましたが、わけがわからないことをやっているなと思ったら無視してください。 ある識別子(下記ではn)を元にデータを取り出すという構造を作る際に、 static final int ID0 = 0; static final int ID1 = 1; static final int ID2 = 2; static final int N0 = 0; static final int N1 = 1; static final int M0 = 2; static final int M1 = 3; static final int M2 = 4; static final Test[] DATA = {new Test(N0, M0), new Test(N0, M1), new Test(N0, M2), new Test(N1, M2)}; public static void main(String[] args){ int n = ID0; Test t = DATA[n]; } class Test{ final int v1, v2; Test(int v1, int v2){ this.v1 = v1; this.v2 = v2; } } とするよりも、 static final int N0 = 0; static final int N1 = 1; static final int M0 = 2; static final int M1 = 3; static final int M2 = 4; public static void main(String[] args){ int n = Test0.ID; Test p; switch(n){ case Test0.ID: p = new Test0(); case Test1.ID: p = new Test1(); case Test2.ID: p = new Test2(); case Test3.ID: p = new Test3(); } } abstract class Test{ abstract getV1(); abstract getV2(); } class Test0 extends Test{ static final int ID = 0; @Override int getV1(){ return NO; } @Override int getV2(){ return MO; } } class Test1 extends Test{ static final int ID = 1; @Override int getV1(){ return NO; } @Override int getV2(){ return M1; } } class Test2 extends Test{ static final int ID = 2; @Override int getV1(){ return NO; } @Override int getV2(){ return M2; } } class Test3 extends Test{ static final int ID = 3; @Override int getV1(){ return N1; } @Override int getV2(){ return M2; } } とすれば、switchの分処理が重くなるが、メモリの消費を抑えられるのかという疑問がありました。