为啥Java中使用枚举enum不如使用静态类

谢邀。难道说是因为枚举多浪费了那点内存?怎么合适怎么来,自己喜欢就好。
■网友
都能实现逻辑,其他的你看心情
■网友
事实上使用枚举类型的性能几乎是使用静态类的16倍,至于为什么我们看代码,这里我写了两个类,Age类是一个枚举类型public enum Age {\t_12,_16,_19}AG类是一个静态类public class AG {\tpublic static final int _12=12;\tpublic static final int _16=16;\tpublic static final int _19=19;}然后是一个测试Main类public class Main {\tpublic void age(Age ag){\t\tswitch (ag) {\t\tcase _12:\t\t\tbreak;\t\tcase _16:\t\t\tbreak;\t\tcase _19:\t\t\tbreak;\t\tdefault:\t\t\tbreak;\t\t}\t}\tpublic void age(int ag){\t\tswitch (ag) {\t\tcase 12:\t\t\tbreak;\t\tcase 16:\t\t\tbreak;\t\tcase 19:\t\t\tbreak;\t\tdefault:\t\t\tbreak;\t\t}\t}\tpublic static void main(String args) {\t\tlong t=0,limit=1000000;\t\tMain mm=new Main();\t\t\t\tt=System.currentTimeMillis();\t\tfor(long i=0;i\u0026lt;limit;i++){\t\t\tmm.age(Age._16);\t\t}\t\tSystem.out.println("耗时"+(System.currentTimeMillis()-t)+"ms");\t\t\t\tt=System.currentTimeMillis();\t\tfor(long i=0;i\u0026lt;limit;i++){\t\t\tmm.age(16);\t\t}\t\tSystem.out.println("耗时"+(System.currentTimeMillis()-t)+"ms");\t}}同样的方法我们执行100万此,执行结果耗时0ms耗时16ms使用枚举类的方法秒杀了静态类,至于为什么我们可以看Main这个方法编译后生成的字节码 // access flags 0x1 public age(Lcom/test/en/Age;)V L0 LINENUMBER 11 L0 INVOKESTATIC com/test/en/Main.$SWITCH_TABLE$com$test$en$Age ()[I ALOAD 1 INVOKEVIRTUAL com/test/en/Age.ordinal ()I IALOAD TABLESWITCH 1: L1 2: L2 3: L3 default: L4 L1 LINENUMBER 13 L1 FRAME SAME GOTO L4 L2 LINENUMBER 15 L2 FRAME SAME GOTO L4 L3 LINENUMBER 17 L3 FRAME SAME GOTO L4 L4 LINENUMBER 21 L4 FRAME SAME RETURN L5 LOCALVARIABLE this Lcom/test/en/Main; L0 L5 0 LOCALVARIABLE ag Lcom/test/en/Age; L0 L5 1 MAXSTACK = 2 MAXLOCALS = 2 // access flags 0x1 public age(I)V L0 LINENUMBER 23 L0 ILOAD 1 LOOKUPSWITCH 12: L1 16: L2 19: L3 default: L4 L1 LINENUMBER 25 L1 FRAME SAME GOTO L4 L2 LINENUMBER 27 L2 FRAME SAME GOTO L4 L3 LINENUMBER 29 L3 FRAME SAME GOTO L4 L4 LINENUMBER 33 L4 FRAME SAME RETURN L5 LOCALVARIABLE this Lcom/test/en/Main; L0 L5 0 LOCALVARIABLE ag I L0 L5 1 MAXSTACK = 1 MAXLOCALS = 2注意看使用枚举类的方法使用的是TABLESWITCH使用静态类的方法使用的确是LOOKUPSWITCH这两个性能差距是很大的。所以不是使用枚举不如静态类,而是他们不懂。
■网友
你这是准备兼容Java 4?


    推荐阅读