• 《Java程序员面试笔试宝典》之switch使用时有哪些注意事项


    switch语句用于多分支选择,在使用switch(expr)的时候,expr只能是一个枚举常量(内部也是由整型或字符类型实现)或一个整数表达式,其中整数表达式可以是基本类型int或其对应的包装类Integer,当然也包括不同的长度整型,例如short。由于byte、short和char都能够被隐式地转换为int类型,因此这些类型以及它们对应的包装类型都可以作为switch的表达式。但是,long、float、double、String类型由于不能够隐式地转换为int类型,因此它们不能被用作switch的表达式。如果一定要使用long、float或double作为switch的参数,必须将其强制转换为int型才可以。

    例如,以下对switch中参数的使用就是非法的。

    float a = 0.123;

    switch(a) //错误!a不是整型或字符类型变量。  

    {

    ....

    }

    另外,与switch对应的是case语句,case语句之后可以是直接的常量数值,例如1、2,也可以是一个常量计算式,例如1+2等,还可以是final型的变量(final变量必须是编译时的常量),例如final int a = 0,但不能是变量或带有变量的表达式,例如i * 2等。当然更不能是浮点型数,例如1.1,或者1.2 / 2等。

    switch(formWay)

    {

    case 2-1 :  //正确

         ...

    case a-2 :  //错误

         ...

    case 2.0 :  //错误

         ...

    }

    随着Java语言的发展,在Java7中,switch开始支持String类型了。以下是一段支持string类型的示例代码。

    public class Test { 

           public void test(String str) { 

                          switch(str) { 

                                case "hehao": 

                                       System.out.println("hehao"); 

                                       break; 

                                case "xuepeng": 

                                       System.out.println("xuepeng"); 

                                       break;

                                case "yexiangyang": 

                                       System.out.println("yexiangyang"); 

                                       break;

                                default: 

                                       System.out.println("default"); 

                                } 

                         }

    }

    从本质上来讲,switch对字符串的支持,其实是int类型值的匹配。它的实现原理如下:通过对case后面的String对象调用hashCode()方法,得到一个int类型的hash值,然后用这个hash值来唯一标识着这个case。那么当匹配的时候,首先调用这个字符串hashCode()函数,获取一个hash值(int类型),用这个hash值来匹配所有的case,如果没有匹配成功,说明不存在;如果匹配成功了,接着会调用字符串的String.equals()方法进行匹配(至于为啥需要调用equals方法可以调用equals方法,请参照5.5.2节内容)。由此可以看出,String变量不能为null,同时,switch的case子句中使用的字符串也不能为null。

    在使用switch的时候需要注意的另外一个问题是:一般必须在case语句结尾添加break语句。因为一旦通过switch语句确定了入口点,就会顺序执行后面的代码,直到遇到关键字break。否则,会执行满足这个case之后的其它case的语句而不管case是否匹配,直到switch结束或者遇到break为止。如果在switch中省略了break语句,那么匹配的case值后的所有情况(包括default情况)都会被执行。如下例所示。

    public class Test {

           public static void main(String[] args) { 

                  int x = 4;

                  switch (x) {

                         case 1: System.out.println(x) ;

                         case 2: System.out.println(x);

                         case 3: System.out.println(x);

                         case 4: System.out.println(x);

                         case 5: System.out.println(x);

                         default: System.out.println(x);

                  }

           }

    }

    程序运行结果为:

    4

    4

    4


  • 相关阅读:
    struts 简单配置运用做一个简单的注册
    hibernate 锁 (转)
    Hibernate 缓存机制(转)
    解决Hibernate:could not initialize proxy
    el 表达式用法(转)
    自动生成Hibernate框架结构
    封装hibernate 初始化类 方便调用 (静态单例模式)
    构建hibernate 框架实现增删改查功能
    JSON 与 对象 、集合 之间的转换(转)
    Ajax 引擎 传输数据的方法
  • 原文地址:https://www.cnblogs.com/anyuan9/p/6171655.html
Copyright © 2020-2023  润新知