Java 为什么不';t枚举导致无限递归?

Java 为什么不';t枚举导致无限递归?,java,enums,Java,Enums,在java中,枚举声明如下: enum Fruits{ BANANA, ORANGE, APPLE } 在本例中,声明的枚举与类的类型相同。因此,当我创建枚举结果的实例时: Fruits example = Fruits.ORANGE 这意味着将创建一个枚举结果的实例,然后为每个枚举创建实例。考虑到fruits中的每个枚举都是fruits类型,他们会继续创建更多实例。。。等等,导致infinte递归。我错过什么了吗 enum Fruits{ BANANA, ORANGE, APPLE }

在java中,枚举声明如下:

enum Fruits{
BANANA,
ORANGE,
APPLE
}
在本例中,声明的枚举与类的类型相同。因此,当我创建枚举结果的实例时:

Fruits example = Fruits.ORANGE
这意味着将创建一个枚举结果的实例,然后为每个枚举创建实例。考虑到fruits中的每个枚举都是fruits类型,他们会继续创建更多实例。。。等等,导致infinte递归。我错过什么了吗

enum Fruits{
BANANA,
ORANGE,
APPLE
}
实际上与

class Fruits{
  static final Fruits BANANA = new Fruits("BANANA", 0);
  static final Fruits ORANGE = new Fruits("ORANGE", 1);
  static final Fruits APPLE = new Fruits("APPLE", 2);

  private Fruits(String name, int ordinal) {
    super(name, ordinal);
  }
}
有一点额外的助手的东西。尝试反编译枚举类(例如,使用
javap
),您可以看到它是这样的

因此,当你写:

Fruits example = Fruits.ORANGE

您没有创建类的新实例:您只是引用一个静态字段。

但请记住,由于它们是单例,更改一个类型字段的属性会更改该字段的所有“实例”

枚举水果{
苹果、橘子;
私有字符串color=“红色”;
公共字符串getColor(){
返回颜色;
}
公共void setColor(字符串颜色){
这个颜色=颜色;
}
}
果苹果=果苹果;
水果其他苹果=水果苹果;
System.out.println(apple.getColor());//印红色
System.out.println(otherApple.getColor());//印红色
apple.setColor(“绿色”);//改变苹果的颜色
System.out.println(pple.getColor());//打印绿色
System.out.println(otherApple.getColor());//打印绿色

No,枚举的声明创建实例;它是唯一可以创建枚举实例的代码构造。您的分配仅引用已存在的实例。枚举实例是静态单例。它们只创建了一次。注释枚举类型的所有常量都可以通过调用该类型的隐式
public static T[]values()
方法获得。