Java枚举类的values()方法返回按声明顺序排列的枚举常量数组,每次调用新建数组,推荐for-each遍历或转Stream处理,频繁调用时应提取为局部变量以避免重复创建。

Java 枚举类自带的 values() 方法返回一个包含所有枚举常量的数组,这是遍历枚举最直接、最常用的方式。
values() 方法的基本用法
values() 是编译器为每个枚举类自动生成的静态方法,无需手动定义。它返回该枚举类型的常量数组,顺序与源码中声明顺序一致。
- 返回类型是
EnumType[](如Color[]),不是List或其他集合 - 每次调用都新建数组,不缓存,但开销极小,可放心使用
- 不能在枚举类外部重写或覆盖该方法
用 for-each 遍历最简洁
推荐用增强 for 循环,代码清晰且不易出错:
enum Color { RED, GREEN, BLUE }
for (Color c : Color.values()) {
System.out.println(c); // 输出:RED、GREEN、BLUE
}
配合 Stream 处理更灵活
如果需要过滤、映射或聚合,转成 Stream 更方便:
立即学习“Java免费学习笔记(深入)”;
Arrays.stream(Color.values()).filter(c -> c != Color.RED).forEach(...)Arrays.stream(Color.values()).map(Color::name).collect(Collectors.toList())
注意 values() 不是单例,慎用于频繁调用场景
虽然创建数组成本低,但在性能敏感的循环内部反复调用 Color.values() 会重复生成数组。建议提取到局部变量:
Color[] allColors = Color.values();
for (Color c : allColors) {
// 处理逻辑
}
不复杂但容易忽略细节。


















