双方
ints并
enums可以同时使用开关或IF-THEN-ELSE和内存使用情况也是最小的两个,而速度是类似的-有关于你提到的点之间没有显著差异。
但是,最重要的区别是类型检查。
Enums被检查,
ints不是。
考虑以下代码:
public class SomeClass { public static int RED = 1; public static int BLUE = 2; public static int YELLOW = 3; public static int GREEN = 3; // sic private int color; public void setColor(int color) { this.color = color; } }尽管许多客户会正确使用此功能,
new SomeClass().setColor(SomeClass.RED);
没有什么可以阻止他们写这个:
new SomeClass().setColor(999);
使用该
public static final模式存在三个主要问题:
- 该问题发生在 运行时 ,而不是 编译 时,因此修复起来将更加昂贵,并且难以找到原因。
- 您必须编写代码来处理错误的输入-通常是
if-then-else
带有结束符的输入else throw new IllegalArgumentException("Unknown color " + color);-再次昂贵 - 没有什么可以防止常量的冲突-即使上面的类代码都具有相同的值
YELLOW
,GREEN
它们也会编译3
如果使用
enums,则可以解决所有这些问题:
- 除非您在中传递有效值,否则代码不会编译
- 不需要任何特殊的“错误输入”代码-编译器为您处理
- 枚举值是唯一的



