我的理解是枚举本质就是单例和多例设计模式,在jdk1.8版本的枚举类型里面定义构造方法时,无需添加private修饰符。也就是说枚举只有一个整形常量是就是单例设计模式,有多个整形常量时就为多例设计模式。
而枚举类型的特点是一个变量有几种固定可能的取值,所以枚举类型由JVM在加载的时候,实例化枚举对象,你在枚举类中定义了多少个就只会实例化多少个,JVM为了保证每一个枚举类元素的唯一实例,构造函数默认为private,保持了它的唯一性。
我将private修饰符去掉之后:
同一个枚举常量实例化出来不同对象,它们的哈希值是一样的。