java中,switch语句抛出空指针异常

1,355 阅读2分钟
  • 本文已参与「新人创作礼」活动,一起开启掘金创作之路。
  • 在java 执行switch语句中,如果传入的参数为String类型的话,会去获取该参数的hashCode值,如果该参数为null的话,则会抛出空指针异常!
  • String s = null 或者 String s = vo.getParam(获取对象的某个属性,而这个属性值的返回值s为null);
  • switch(s) 或者 switch(null),此时就会抛空指针异常。

《阿里巴巴Java开发手册》有一条这样的规约:

【强制】当 switch 括号内的变量类型为 String 并且此变量为外部参数时,必须先进行 null判断。

【强制】在一个 switch 块内,每个 case 要么通过 continue/break/return 等来终止,要么 注释说明程序将继续执行到哪一个 case 为止;在一个 switch 块内,都必须包含一个 default语句并且放在最后,即使它什么代码也没有。

switch case 语句有如下规则:

switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型,同时 case 标签必须为字符串常量或字面量。

switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。

case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。

当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。

当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。

switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。

switch case 执行时,一定会先进行匹配,匹配成功返回当前 case 的值,再根据是否有 break,判断是否继续输出,或是跳出判断。

当 switch 括号内的变量类型为 String 并且此变量为外部参数时,使用case做的判断在某种意义上其实就是获取字符串的hashCode的过程,因此,一定要保证,括号内的变量类型,不能为null。