Java枚举比较用equals还是==

2,207 阅读1分钟

前言

前两天code review,leader说枚举比较用equals不要用==,当时任务比较多,直接改了,没有深究,今天有时间搜了一下,研究了一下枚举的实现,实际测试了一下,得出结论, 对于枚举,==和equals的效果是相同的

探究

源码

查看Enum的源码,可以发现Enum重写了equals且禁止重写,内部也是用的==实现的

public final boolean equals(Object var1) {
        return this == var1;
    }

==和equals的区别参考这里

枚举的比较实际上是比较两个枚举对象的内存地址

枚举的实现

主要参考了这篇文章,十分详细,跟着作者的思路过了一遍,明白了不少,强烈推荐大家细读一遍

枚举是作为抽象类存在的,每个枚举类型都是作为一个static final字段存在,并且每个枚举类型在内部是作为子类实现的,并且枚举对象是单例的. 所以对于枚举的比较直接比较内存地址就可以了.这也是为什么jdk源码会重写equals并且声明为final

结论

基于枚举的特性,直接比较内存地址就可以,所以equals和==作用相同