StackOverflow 周报
这是 Stack Overflow 第三周周报,由于本周周四外出,所以只有三篇内容。两篇 Java、一篇 Python。公众号 「渡码」 为日更,欢迎关注。 DAY1. 枚举对象 == 和 equals 区别 我们在比较枚举常量时可以使用 == 运算符或者 equals 方法,如: 先考虑第一个问题:为什么可以用 == 判断枚举常量相等? 我们都知道判断对象的相等应该用 equals 方法,== 只是判断对象的引用是否相等,枚举常量能够使用 == 判断相等是因为枚举常量除了定义时初始化的对象外,没有其他实例。例如:常量 APPLE 在定义时已经初始化,并且运行时不会再有其他的 APPLE 枚举常量。根据 JLS 文档,Java 通过以下四点保证枚举常量不存在定义之外的实例 试图显式实例化枚举类型是编译时错误,例如:new FRUITS() Enum 类中的 clone 方法确保永远不能克隆Enum常量,看看 clone 方法可以看到直接抛出 CloneNotSupportedException 异常 序列化机制的特殊处理确保不会因为反序列化而创建重复的实例 禁止枚举类型的反射实例化 因为枚举常量只有一个实例,因此可以直接用 == 判断枚举实例的相等。如果我们看下 equals 源码就可以发现它也是用 == 进行判断,所以我们考虑第二个问题:使用 == 和 equals 的区别是什么