当前位置: 首页 > 面试题库 >

Java:枚举与整数

车峻熙
2023-03-14
问题内容

在Java中使用标志时,我看到了两种主要方法。使用int值和一组if-else语句。另一个是使用枚举和case-switch语句。

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


问题答案:

双方intsenums可以同时使用开关或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);-再次昂贵
  • 没有什么可以防止常量的冲突-即使上面的类代码都具有相同的值YELLOWGREEN它们也会编译3

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

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


 类似资料:
  • 本文向大家介绍Java枚举与.net枚举区别详解,包括了Java枚举与.net枚举区别详解的使用技巧和注意事项,需要的朋友参考一下 通过一段时间的项目实践,发现java中的枚举与.net中的枚举有很大的差别,初期造成了我对java中的枚举一些错误理解及部分有缺陷的应用,其实追其原因还是因为我会习惯性的认为java的枚举在作用以及定义上与.net应该是差不多的,毕竟两者都是高级语言,语言上也有很多相

  • 问题内容: Java Enum类的文档声明以下内容: 返回与此枚举常量的枚举类型相对应的Class对象。当且仅当e1.getDeclaringClass()== e2.getDeclaringClass()时,两个枚举常量e1和e2属于相同的枚举类型。(对于具有特定于常量的类主体的枚举常量,此方法返回的值可能不同于Object.getClass()方法返回的值。) 我不了解何时和与众不同。有人可以

  • 主要内容:声明枚举,枚举类,为枚举添加方法,EnumMap 与 EnumSet枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是 7 天中的一个等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型。 在 JDK 1.5 之前没有枚举类型,那时候一般用接口常量来替代。而使用 Java 枚举类型 enum 可以更贴近地表示这种常量。 声明枚举 声明枚举时必须使用 enu

  • 问题内容: Java中的静态和非静态枚举有什么区别?两种用法是相同的。 正确吗 所有静态的都在启动时加载到内存中,非静态的则按需加载 ? 如果是,那么哪种方法更好?将某些数据始终保留在内存中还是每次使用服务器资源加载它们? 问题答案: 所有的都是有效的。如果您有嵌套的枚举,则它与相同。 所有类都是延迟加载的(枚举或其他),但是在加载时,它们会一次全部加载。也就是说,您不能加载一些常量,而不能加载其

  • 问题内容: 我正在查看公司其他部门维护的一些Java代码,顺便说一下,这是一些前C和C ++开发人员所维护的。普遍存在的一件事是使用静态整数常量,例如 除了缺少“最终”限定符外,这种代码也让我有些不安。我本来希望看到的是,从学校开始主要接受Java的培训,这会更像 但是,论点使我失望。为什么要比后者更好呢? 问题答案: 为什么要比后者更好呢? 这样做要好得多,因为它可以为您提供类型安全性并具有自记

  • 让我们看看一个需要诉诸于代码的场景,来考虑为何此时使用枚举更为合适且实用。假设我们要处理 IP 地址。目前被广泛使用的两个主要 IP 标准:IPv4(version four)和 IPv6(version six)。这是我们的程序可能会遇到的所有可能的 IP 地址类型:所以可以 枚举 出所有可能的值,这也正是此枚举名字的由来。 任何一个 IP 地址要么是 IPv4 的要么是 IPv6 的,而且不能