Java中的枚举类型:每个循环中的values()

Enum type in Java : values() in for each loop

本问题已经有最佳答案,请猛点这里访问。

我对values()方法在Java的Enum类型中的工作方式有点好奇。
从Java规范文档中可以看出,我们可以在每个循环中迭代某个枚举类型的所有值。 例如

1
2
3
4
for (Planet p : Planet.values()) {
System.out.printf("Your weight on %s is %f%n",
                  p, p.surfaceWeight(mass));
}

我认为对于每个循环,迭代所有值。 在此调用中,我们将在每个循环调用中重复调用一个方法,以便如何对所有枚举类型进行迭代,或者values()方法使用某种迭代器。 有人可以帮助我提供此方法的实现文档吗?


values()方法返回一个enum值的数组。 在Java中,您可以使用for(Object obj : arr)语法遍历数组。 这只是一种语法糖。 在编译过程中,将创建隐式的int局部变量,并将循环重写为:

1
2
3
4
5
6
Planet[] vals = Planet.values();
for(int i=0; i<vals.length; i++) {
    Planet p = vals[i];
    System.out.printf("Your weight on %s is %f%n",
              p, p.surfaceWeight(mass));
}


方法values()在编译时生成。

每个enumjava.lang.Enum的子类。 在内部,它将枚举元素保留在数组中。

调用values()时,将生成并复制一个新数组,然后将其返回给您。


您是对的-.values()返回枚举可能值的数组。

此数组可用于迭代,并且在每个迭代步骤中,您将获得此enum的另一个值,您可以像使用其他值一样使用它-e。 g。在其上调用方法。