Java枚举比较用equals还是==
2018-08-30 本文已影响3人
alonwang
前言
前两天code review,leader说枚举比较用equals不要用==,当时任务比较多,直接改了,没有深究,今天有时间搜了一下,研究了一下枚举的实现,实际测试了一下,得出结论, 对于枚举,==和equals的效果是相同的
探究
源码
查看Enum的源码,可以发现Enum重写了equals且禁止重写,内部也是用的==实现的
public final boolean equals(Object var1) {
return this == var1;
}
==和equals的区别参考这里
枚举的比较实际上是比较两个枚举对象的内存地址
枚举的实现
主要参考了这篇文章,十分详细,跟着作者的思路过了一遍,明白了不少,强烈推荐大家细读一遍
枚举是作为抽象类存在的,每个枚举类型都是作为一个static final字段存在,并且每个枚举类型在内部是作为子类实现的,并且枚举对象是单例的.
所以对于枚举的比较直接比较内存地址就可以了.这也是为什么jdk源码会重写equals并且声明为final
结论
基于枚举的特性,直接比较内存地址就可以,所以equals和==作用相同