【发布时间】:2013-08-15 23:20:05
【问题描述】:
我只是想知道为什么 Java 7 switch 语句不支持 null 情况而是抛出 NullPointerException?请参阅下面的注释行(示例取自the Java Tutorials article on switch):
{
String month = null;
switch (month) {
case "january":
monthNumber = 1;
break;
case "february":
monthNumber = 2;
break;
case "march":
monthNumber = 3;
break;
//case null:
default:
monthNumber = 0;
break;
}
return monthNumber;
}
这可以避免在每次使用 switch 之前进行空检查的 if 条件。
【问题讨论】:
-
对此没有决定性的答案,因为我们不是创造这种语言的人。所有的答案都是纯粹的猜想。
-
尝试打开
null将导致异常。执行if检查null,然后进入switch语句。 -
来自JLS:在Java编程语言的设计者的判断中,[如果表达式在运行时计算为
null,则抛出NullPointerException]是更好的结果而不是静默跳过整个 switch 语句或选择执行默认标签(如果有)之后的语句(如果有)。 -
@gparyani:回答这个问题。这听起来非常正式和明确。
-
@JeffGohlke:“除非您是做出决定的人,否则无法回答为什么的问题。”...好吧,gparyani 的评论证明并非如此跨度>
标签: java switch-statement language-design