2. Switch能否用String做参数?

2016/9/26 20:52 下午 posted in  Java comments

1.jdk1.7之前只能使用int型作为参数,byte、short会自动转换成int进行比较。
2.在jdk 1.7之前,无法使用String作为参数。1.7以后加入。
原理:hashCode()+equals()
编译器在编译期间给代码做了转换。
原始:

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"); 
          } 
      } 
}

编译器优化后:

import java.io.PrintStream; 
 
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; 
               } 
          } 
}

参考资料:
http://www.importnew.com/14597.html