先看下面的例子,如果switch后的枚举对象为空,会出现什么情况呢?
public enum SeasonEnum {
SPRING,
SUMMER,
AUTUM,
WINTER
}
public class Test {
public static void main(String[] args) {
SeasonEnum seasonEnum = null;
switch (seasonEnum) {
case SPRING:
System.out.println("春天到啦!");
break;
case SUMMER:
System.out.println("夏天到啦!");
break;
case AUTUM:
System.out.println("秋天到啦!");
break;
case WINTER:
System.out.println("冬天到啦!");
break;
default:
System.out.println("我也不知道现在是什么季节!");
}
}
}
image.png
目前的Java的switch语句只能判断byte、short、char、int类型(JDK7已经允许使用string类型),为什么枚举也能跟在switch后面呢?很简单,因为编译的时候,编译器判断出switch后面的参数是枚举类型,然后就会根据枚举的排序值继续匹配。当枚举对象为空时,拿不到排序值,因此会出现空指针异常。
因此,在switch中使用枚举对象时,注意判空
网友评论