原文链接

首先给出以下Enum:

1
2
3
4
5
enum Size{
SMALL,
MEDIUM,
LARGE
}

问下面的代码执行的结果是:

1
2
3
4
5
6
public static void main(String[] args) {
final var size = Size.SMALL; //line n1
switch (size) { //line n2
case SMALL: {System.out.println(size);} //line n3
}
}
  1. n1处编译失败,初始化的写法错误
  2. n2处编译失败,没对应把所有Size包含在case内
  3. n3处编译失败,case后面应该是完整的Size.SMALL
  4. 输出 SMALL
  5. 输出 Size@3cb5cdba

分析

选项1是错的,局部变量可以使用final来修饰,从Java 10开始,可以使用关键字var来声明局部变量,声明的变量类型由初始化的类型决定。
选项2也是错的,switch-case从来都不需要面对所有情况写case。
选项3也是错的,当switch的判断条件是enum类型时,case里不需要写类名。
选项4是对的,enum类型默认重写了toString方法,输出name的值。
选项5是错的,上面说了,enum的toString输出的是name,而不是HashCode.