java switch case string
Switch能否⽤string做参数
在Java5以前,switch(expr)中,exper只能是byte,short,char,int类型(或其包装类)的常量表达式。
从Java5开始,java中引⼊了枚举类型,即enum类型。
从Java7开始,exper还可以是String类型。
但是long在所有版本中都是不可以的。
jdk1.7并没有新的指令来处理switch string,⽽是通过调⽤switch中string.hashCode,将string转换为int从⽽进⾏判断。hashcode返回的是int型
可以发现:进⾏switch的实际是hash值,然后⽤equals进⾏安全检查(因为hash值可能会发⽣碰撞),所以性能不如枚举。switch⽀持String其实是⼀个语法糖,在编译后的字节码⽂件中都会被还原成原⽣类型,并在相应位置插⼊了强制转换代码,底层的JVM在switch上并没有修改。
当传⼊switch的是null时,在运⾏时对⼀个null调⽤hashCode()⽅法,会抛出NullPointerException;如果case写的是null,那么在编译时⽆法求出hashcode,就会编译报错。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。