文档章节

Enum枚举类型比值

gaolu
 gaolu
发布于 2016/02/28 18:12
字数 262
阅读 76
收藏 0

在编码时,两个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并没有什么特殊之处。


© 著作权归作者所有

gaolu
粉丝 29
博文 58
码字总数 52768
作品 0
朝阳
架构师
私信 提问
java枚举的用法

转载:点击打开链接 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中。 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 1. 原始的接口定义...

lwang_IT
2017/12/25
0
0
二十二、枚举

说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 上一讲介绍了结构体...

长平狐
2013/03/28
59
0
Java进级篇 - Java Enum的用法详解

用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 public enum ...

YOTOO
2014/05/19
703
1
java枚举类型enum的使用

java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?以前我们都是采用这种方式...

微wx笑
2014/08/25
0
0
java枚举类型enum的使用

java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?以前我们都是采用这种方式...

技术小牛
2014/05/10
14K
0

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写自定义控件55-手机通讯录

一、前言 前面几篇文章中的控件基本上难度系数接近0,甚至有凑控件数量的嫌疑,这次必须来一个强悍的控件,本控件难度系数在所有控件中排前五,代码量也不少,头文件都550行,实现文件1600行...

飞扬青云
10分钟前
15
0
C++与QML交互2:在QML中调用C++特性

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/xi_gua_gua/article/details/56991367 QML引擎(QQmlEngin...

shzwork
28分钟前
2
0
【Go专家编程】defer这里有个坑

前言 项目中,有时为了让程序更健壮,也即不panic,我们或许会使用recover()来接收异常并处理。 比如以下代码: func NoPanic() {if err := recover(); err != nil {fmt.Println("Recov...

恋恋美食
36分钟前
3
0
20190920笔记

扩展: bashrc和bash_profile http://ask.apelearn.com/question/7719 http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html echo 颜色 http://www.cnblogs.com/lr-ting/archi......

徐-锐
52分钟前
2
0
Shiro整合Redis代码解读

1. shiro默认使用的MemoryConstrainedCacheManager创建MapCache来保存缓存数据。manager和cache对象之间的关系可以参考笔者的另一篇文章,Springboot Redis详解。 2. shiro整合Redis的关键就...

sunranhou
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部