switch语句的作用其实就相当于if()else,就是一种选择语句,语法如下:
switch(表达式){ case 常量表达式1: 语句1; case 常量表达式2: 语句2; … case 常量表达式n: 语句n; default: 语句n+1;}
需要注意的是switch中表达式的类型可以是byte,short,char,int,enum类型,java7之后
可以使string类型也支持作为表达式,可以研究下原理:
public class StringInSwitchCase { public static void main(String[] args) { String mode = args[0]; switch (mode) { case "ACTIVE": System.out.println("Application is running on Active mode"); break; case "PASSIVE": System.out.println("Application is running on Passive mode"); break; case "SAFE": System.out.println("Application is running on Safe mode"); } } }
将上述代码进行反编译:
public class StringInSwitchCase{ public StringInSwitchCase() { } public static void main(string args[]) { String mode = args[0]; String s; switch ((s = mode).hashCode()) { default: break; case -74056953: if (s.equals("PASSIVE")) { System.out.println("Application is running on Passive mode"); } break; case 2537357: if (s.equals("SAFE")) { System.out.println("Application is running on Safe mode"); } break; case 1925346054: if (s.equals("ACTIVE")) { System.out.println("Application is running on Active mode"); } break; } } }
可以清晰的看到,java底层是对string调用了hashCode()方法,而返回的hashCode是int类型,其实还是用hashCode
进行case,然后再用equals进行比较,满足条件后便执行相应的语句。
由此可见使用string作为表达式不如直接使用整形或者枚举效率高,因为使用string会额外调用hashCode方法,而且换有可能
出现hash冲突。其实我们在编程中更多地还是使用枚举来进行条件判断。