ordinal()方法返回枚举常量在类中声明顺序的从0开始的索引,该序号由编译器固定且不可变;它仅表示源码位置,不反映业务含义,不可用于持久化或替代有意义标识符。

ordinal() 方法直接返回枚举常量在类中声明的顺序索引,从 0 开始计数。
ordinal() 的基本行为
每个枚举常量在编译时就被赋予一个固定的序号,按它们在枚举类中出现的先后顺序依次为 0、1、2……
这个序号在运行期不可变,也不受字段、方法或其他代码影响。
使用示例
例如:
enum Color { RED, GREEN, BLUE }
那么:
-
Color.RED.ordinal()→ 返回 0 -
Color.GREEN.ordinal()→ 返回 1 -
Color.BLUE.ordinal()→ 返回 2
注意事项
ordinal() 是由编译器自动生成的,无需手动定义。
它不反映业务含义,仅表示源码中的声明位置。
- 不要用 ordinal() 做持久化存储(如数据库字段),因为增删枚举常量会改变后续项的序号
- 避免用 ordinal() 替代有意义的标识符(比如用 0 表示“启用”,1 表示“禁用”),应改用自定义字段或方法
- EnumSet 和 EnumMap 内部依赖 ordinal() 实现高效操作,但普通业务逻辑中应优先使用 name() 或自定义属性
和 name() 的区别
name() 返回声明时使用的字符串字面量(如 "RED"),而 ordinal() 返回整数索引。
两者都稳定、不可变,但语义完全不同:一个是名称,一个是位置。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











