Enum枚举类型比值

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

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

看下面的例程:
[code]
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);
}
}
[/code]
在程序中,使用反射机制创建了两个枚举对象并使用==进行比较,从而说明Enum并没有什么特殊之处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值