众所周知
Enum类重写了equals方法,使其与“==”判断一致
public final boolean equals(Object other) {
return this==other;
}
但这只针对枚举这个类之间,很多时候我们不直接比较枚举类,而是比较具体的属性。
因为几乎前后端交互不会传递枚举这个对象,只会传递里面的属性比如code,name等等。
然后有两个思路:
- getByCode通过code获取对应的枚举对象,比较枚举对象
switch (MathEnum.getByCode("=")) {
case LE:
case LT:
- 枚举对象getCode返回code属性比较String
if (!MathEnum.EQ.getCode().equals("=")){
log.info("不执行");
}
枚举和字符串
一个运算符枚举类
public enum MathEnum {
EQ("=", "等于"),
GE(">=", "大于或等于"),
LE("<=", "小于或等于"),
GT(">", "大于"),
LT("<", "小于"),
BTN("between", "在...之间"),;
private final String code;
private final String desc;
MathEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
public String getCode() {
return code;
}
public String getDesc() {
return desc;
}
public static MathEnum getByCode(String code) {
if (code == null) {
return null;
}
for (MathEnum mathEnum : MathEnum.values()) {
if (code.equals(mathEnum.getCode())){
return mathEnum;
}
}
return null;
}
public static List<String> getCodes() {
List<String> result = Lists.newArrayList();
for (MathEnum mathEnum : MathEnum.values()) {
result.add(mathEnum.getCode());
}
return result;
}
}
会有这四种比较形式。其实MathEnum.EQ.getCode()返回值本就是String类型的"=",本质是字符串之间的比较。
if (MathEnum.EQ.getCode() != "="){
log.info("执行");
}
if ("=" != MathEnum.EQ.getCode()){
log.info("执行");
}
if (!"=".equals(MathEnum.EQ.getCode())){
log.info("不执行");
}
if (!MathEnum.EQ.getCode().equals("=")){
log.info("不执行");
}
回忆一下字符串的==和equals,当字符串相同,但是对象不同或者说地址不同时:
- equals返回true
- ==返回false