java-枚举只适合用于只有固定几个值

346 阅读1分钟

创建枚举类

public enum DbnameEnums {
  /**扫码*/
  QRCODE,
  /**互联网*/
  ORDER
}

这个是最简洁的写法。但是里面很多东西都是默认的,所以有点不好理解。下面等下会讲默认的东西是啥。

比较值是否相等

DbnameEnums a = DbnameEnums.QRCODE; //把DbnameEnums.QRCODE实例对象赋值给变量a
DbnameEnums b = DbnameEnums.QRCODE; //把DbnameEnums.QRCODE实例对象赋值给变量b

if(a.equals(b)){ //
...
}

枚举是类,为什么枚举可以这么比较?

QRCODE和ORDER是枚举的实例对象。但是我们要比较的是枚举的字符串值是否相等,那枚举的字符串值在哪里?枚举的字符串值默认就是QRCODE和ORDER。

上面的代码,反编译之后是这样,即QRCODE和ORDER是枚举的实例对象。

而且,枚举的实例对象的字符串值(toString方法的值)默认就是QRCODE和ORDER。

所以,才可以按上面的方法直接比较枚举实例的字符串值是否相等。

其实,更简单一点的写法是:a == b。正常情况,字符串对象是不能用==去比较的,因为这样比较的是字符串对象引用的地址值,而不是字符串值——所以必须使用equal方法比较。那为什么枚举可以这么写?因为枚举的实例是唯一的,所以不同的枚举实例引用的地址值一定是一样的,所以才可以用==比较。

但是不建议用==,虽然简洁,但是看不懂,最好还是用equals比较,因为一看就知道是比较字符串值是否相等。

应用场景

本文上面的例子其实也不适合用枚举,最适合的还是固定只有几个值的情况。

参考

www.liaoxuefeng.com/wiki/125259…