Java: Enum vs. Int

2022-08-31 14:52:28

在Java中使用标志时,我看到了两种主要方法。一个使用 int 值和一行 if-else 语句。另一种是使用枚举和大小写开关语句。

我想知道在内存使用和速度方面,使用枚举与整数进行标志之间是否存在差异?


答案 1

两者都可以使用switch或if-then-else,并且两者的内存使用量也最小,并且速度相似 - 在您提出的观点上,它们之间没有显着差异。intsenums

但是,最重要的区别是类型检查。 已检查,未检查。Enumsints

请考虑以下代码:

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-elseelse throw new IllegalArgumentException("Unknown color " + color);
  • 没有什么可以阻止常量的冲突 - 即使两者具有相同的值,上面的类代码也会编译YELLOWGREEN3

如果使用 ,则可以解决以下所有问题:enums

  • 您的代码不会编译,除非您在
  • 不需要任何特殊的“错误输入”代码 - 编译器会为您处理
  • 枚举值是唯一的

答案 2

内存使用量和速度不是重要的考虑因素。无论哪种方式,您都无法测量差异。

我认为枚举在应用时应该是首选,因为强调选择的值在一起并包含一个闭合集的事实。可读性也大大提高了。使用枚举的代码比分散在代码中的杂散 int 值更具自我记录性。

首选枚举。