自定义枚举类 Enum 是否可以作为 HashMap 的key

本文探讨了自定义枚举类是否能用作HashMap的Key,并通过反编译揭示其内部实现机制,包括equals和hashCode方法的重写,确保枚举类适合作为Map的Key。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义枚举类 Enum 是否可以作为 HashMap 的key?针对这个问题,我们的答案是肯定的,至于为什么我们做如下分析。

1、Enum 为常量
自定义的枚举类为常量,我们说一个类为常量,就像是 java.lang.String 类一样,属于final的类。

2、自定义测试 Enum 类

/**
 * Created by wangyingjie1 on 2016/11/7.
 */
public enum OrderStatusEnum {

    SUCCESS;

}

3、反编译枚举类
3.1、执行:javap -v ClassName 命令

D:\workspace_git_2\jd-ssm-stu\jd-ssmman-web\target\test-classes\com\jd\beans>javap -v OrderStatusEnum
这里写图片描述
这里写图片描述
这里写图片描述

3.2、操作过程截图
这里写图片描述

3.3、总结
(1)、自定义的Enum类被编译器优化为final类,类似于String的常量类
(2)、自定义的Enum类继承自 java.lang.Enum 类
(3)、语法糖,自定义枚举通过反编译可以看到该类添加了 values()、valueOf()方法。
(4)、equals、hashCode 已经被重写。
通过以上的反编译,我们可以看到最终编译器把我们的自定义Enum类都继承了 java.lang.Enum 类,在这个类里面已经重写了Object类的 equals、hashCode,所以说我们可以放心将 Enum 用于Map的key。

4、java.lang.Enum 源代码:

   /**
     * Returns true if the specified object is equal to this
     * enum constant.
     *
     * @param other the object to be compared for equality with this object.
     * @return  true if the specified object is equal to this
     *          enum constant.
     */
    public final boolean equals(Object other) {
        return this==other;
    }

    /**
     * Returns a hash code for this enum constant.
     *
     * @return a hash code for this enum constant.
     */
    public final int hashCode() {
        return super.hashCode();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值