提问人:banan3'14 提问时间:11/4/2022 最后编辑:oguz ismailbanan3'14 更新时间:11/5/2022 访问量:61
null 总是会导致 Java 8 的 switch 语句出现 NullPointerException 吗?
Will null always cause NullPointerException in switch statement in Java 8?
问:
该部分处理其中一个部分未显式处理的所有值。
default
case
但是,当我运行以下代码时
Integer i = null;
switch (i) {
case 1:
// ...
break;
default:
System.out.println("default hit");
}
,被抛出。总是会导致被抛出,或者它是否有可能在声明中击中标签?我想 Java 18 之前的任何 Java 版本也应该如此,其中引入了匹配。NullPointerException
null
NullPointerException
default
switch
null
答:
2赞
Joachim Sauer
11/4/2022
#1
JLS的相关部分是这样说的:
通过首先计算选择器表达式来执行 switch 语句。然后:
- [...]
- 否则,如果计算选择器表达式的结果是 ,则抛出 a,并且由于这个原因,整个 switch 语句会突然完成。
null
NullPointerException
因此,值永远不会导致事例(或任何其他事例)被执行。null
default
早些时候,在非规范性部分,规范解释了:
null
不能用作大小写
常量,因为它不是常量表达式。即使允许case null
,也是不可取的,因为在这种情况下的代码永远不会被执行。这是因为,给定引用类型(即String
或装箱基元类型或枚举类型)的选择器表达式,如果选择器表达式在运行时的计算结果为null
,则会发生异常。根据 Java 编程语言设计者的判断,传播异常比没有大小写标签匹配或默认
标签匹配要好。
评论
String
enum