`
sharong
  • 浏览: 485356 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
D1667ae2-8cfc-3b68-ac7c-5e282789fa4a
论开源
浏览量:8460
7eb53364-fe48-371c-9623-887640be0185
Spring-data-j...
浏览量:12769
社区版块
存档分类
最新评论

Enum枚举类型比值

阅读更多
在编码时,两个Enum实例,直接用==就可以比较它们的值了,而不是比较这两个Object的地址。这显然和通常的Object不一样。而且,在JDK7之后,枚举还能用在switch-case开关语句中。

Enum不是primitive类型,却可以用==比较,这是为什么呢?Enum本身可以是多实例的,关键在于,它的每个值对应唯一的Object,因此,它有几个值,就生成几个实例。所有相关的变量都是代表这几个实例的,自然要么==,要么!=,比较值和比较地址是一样的。

看下面的例程:
public enum AA{ 
 aa; 
  
 public static void main(String[] args) throws Exception{ 
  Constructor<?> constructor = AA.class.getDeclaredConstructors()[0]; 
  Method method = Constructor.class.getDeclaredMethod("acquireConstructorAccessor"); 
  
  method.setAccessible(true); 
  method.invoke(constructor); 
  
  Field field = Constructor.class.getDeclaredField("constructorAccessor"); 
  field.setAccessible(true); 
  ConstructorAccessor accessor = (ConstructorAccessor) field.get(constructor); 
  
  AA aa1 = (AA) accessor.newInstance(new Object[]{"aa", 0}); 
  AA aa2 = AA.aa; 
  
  System.out.println(aa1.ordinal() == aa2.ordinal()); 
  System.out.println(aa1 == aa2); 
 } 
} 

在程序中,使用反射机制创建了两个枚举对象并使用==进行比较,从而说明Enum并没有什么特殊之处。
1
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics