Java中枚举的比较

115 阅读1分钟

1 起因

在项目开发中, 经常会用到枚举, 那么枚举的比较会不会和对象一样, 产生属性相同但比较为false呢?

2 解决方案

枚举的比较有如下三种方式:

  1. compareTo()
  2. equals()
  3. ==

2.1 compareTo()

此方法返回的是枚举之间的差值, 直接上代码(来源于W3Cschool):

enum Level {
  LOW, MEDIUM, HIGH, URGENT;
}

public class Main {
  public static void main(String[] args) {
    Level s1 = Level.LOW;
    Level s2 = Level.URGENT;
    int diff = s1.compareTo(s2);
    // diff = s1 - s2 = 0 - 3 = -3
    System.out.println(diff);
  }
}

当返回值为0时, 两个枚举相同

2.2 equals()

与正常的对象对比一致, 相同枚举会返回true

2.3 ==

相同的枚举会返回true

3 原理解析

相信大部分人和我一样, 会对2.2中的方法产生疑问

其实根源在我们生成的枚举的方式上, 在java中我们一般这样创建枚举:

TestEnum one = TestEnum.ONE
TestEnum two = TestEnum.ONE

在两个new出来的对象之间使用equals(), 结果必然是false

但我们在生成枚举时并不是使用的new, 而是直接获取的引用对象, 那么使用equals()自然返回的是true了