ordinal()方法返回枚举常量声明顺序的索引(从0开始),由编译器自动生成且不可修改;但因依赖声明顺序,易受增删重排影响,建议优先使用显式定义的code等自定义字段。

Java 枚举的 ordinal() 方法会返回该枚举常量在枚举类中声明顺序的索引(从 0 开始),无需额外定义字段或逻辑,直接调用即可。
ordinal() 的基本用法
每个枚举常量在编译时就被赋予一个固定的序号,按源码中出现的先后顺序依次为 0、1、2……
- 这个值由编译器自动生成,不能手动修改
- 调用方式简单:直接在枚举实例上调用
.ordinal() - 例如:
Day.MONDAY.ordinal()返回 0,Day.TUESDAY.ordinal()返回 1
一个典型示例
定义一个表示星期的枚举:
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
使用方式如下:
-
Day.MONDAY.ordinal()→ 0 -
Day.FRIDAY.ordinal()→ 4 -
Day.SUNDAY.ordinal()→ 6
需要注意的关键点
ordinal() 虽然方便,但存在明显局限性,实际开发中应谨慎使用:
- 一旦调整枚举常量的声明顺序(如把
WEDNESDAY移到最前面),所有后续常量的ordinal值都会变化 - 新增、删除或重排枚举项可能导致序列化、数据库映射、配置文件等场景出错
- 它不是语义化的标识,不具备业务含义;建议优先使用自定义字段(如
code或value)配合static查找方法
替代方案建议(更安全的做法)
如果需要稳定、可读性强的编号,推荐显式定义属性:
enum Status {
SUCCESS(1, "操作成功"),
FAILURE(2, "操作失败"),
PENDING(3, "处理中");
private final int code;
private final String desc;
Status(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode() { return code; }
public String getDesc() { return desc; }
}
这样可通过 Status.SUCCESS.getCode() 获取固定数值,避免依赖声明顺序。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











