zoukankan      html  css  js  c++  java
  • switch

    在Java7之前,switch只能支持 byte、short、char、int或者其对应的封装类以及Enum类型。在Java7中,加入了对String支持。

     1、int型

    int i = 3;
            switch (i) {
            case 1:
                System.out.println(1);
                break;
            case 2:
                System.out.println(2);
                break;
            default:
                System.out.println(0);
            }

    输出:0

    2、enum类型

    public enum Size {
        S, M, L
    };
    switch (Size.M) {
            case S:
                System.out.println("小");
                break;
            case M:
                System.out.println("中 ");
                break;
            default:
                System.out.println("无");
            }

    输出:中

    3、String

    String s = "M";
            switch (s) {
            case "S":
                System.out.println("小");
                break;
            case "M":
                System.out.println("中 ");
                break;
            default:
                System.out.println("无");
            }

    输出:中

    分析(String类型)

    package jichu;
    
    public class TestSwitch {
        public void test(String s) {
            switch (s) {
            case "S":
                System.out.println("小");
                break;
            case "M":
                System.out.println("中 ");
                break;
            default:
                System.out.println("无");
            }
        }
    }

    字节码反编译后:

    package jichu;
    
    import java.io.PrintStream;
    
    public class TestSwitch
    {
      public void test(String s)
      {
        String str;
        switch ((str = s).hashCode())
        {
        case 77: 
          if (str.equals("M")) {
            break;
          }
        case 83: 
          if ((goto 78) && (str.equals("S")))
          {
            System.out.println("小");
            return;
            
            System.out.println("中 ");
          }
          break;
        }
        System.out.println("无");
      }
    }

    从中可以看出:

    1、通过hashCode()求出字符串的hashCode,因为需要调用hashCode(),所以传入的String值不能为空,否则报空指针异常。

    2、通过equals方法比较输入值。


    为什么switch支持byte,short,char,String,而不支持long类型?

    java7之前,在switch(expr)中,expr只能是一个整数表达式或者枚举常量,整数表达式可以是int基本类型或Integer包装类型;

    由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。

    java7之后,加入了对String的支持。

    long类型不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。

  • 相关阅读:
    WEB开发中合理选择图片格式
    Ext.ux.form.LovCombo bug修正
    Ext.grid.PropertyGrid 扩展
    BLOG代码高亮
    Box2D教程1创建碰撞世界
    Box2D教程2鼠标交互
    Box2D教程5碰撞检测
    Box2D教程3刚体绑定外观
    管窥HTML5
    Box2D教程4复杂刚体的复杂外观
  • 原文地址:https://www.cnblogs.com/SQP51312/p/6065681.html
Copyright © 2011-2022 走看看