Java:枚举与整数

2023-12-11

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

我想知道使用枚举与整数作为标志在内存使用和速度方面是否存在差异?


Both ints and enums可以同时使用 switch 或 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图案:

  • 问题发生在runtime, not compile时间,因此修复成本会更高,而且更难找到原因
  • 您必须编写代码来处理错误的输入 - 通常是if-then-else与最后的else throw new IllegalArgumentException("Unknown color " + color);- 又贵了
  • 没有什么可以阻止常量冲突 - 即使上面的类代码也将编译YELLOW and GREEN两者具有相同的值3

如果你使用enums,您解决了所有这些问题:

  • 除非您传递有效值,否则您的代码将无法编译
  • 不需要任何特殊的“错误输入”代码 - 编译器会为您处理它
  • 枚举值是唯一的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java:枚举与整数 的相关文章

随机推荐