问:switch(x) 语句中,x 可以是哪些类型?

:包括:byte/short/int/char(包括它们的封装类)、enum枚举、Java7 后开始支持 String;

注意事项
1、case 语句中的值的数据类型必须与变量的数据类型相同;
2、case 语句开始执行,直到 break 语句出现才会跳出 switch 语句,匹配到哪一个case就从哪一个位置向下执行,直到遇到了 break 或者整体结束为止;
3、多个 case 后面的数值不可以重复;
4、注意:case 和 deault 语句顺序无所谓;但是当匹配后,无 break 语句,则会从当前位置往后执行,从这里开始遍历了;

/*switch:return 比 break 效果更强,直接退出。示例:枚举调用*/ 
switch(demo.success.getCode()) {
    case 1: System.out.println(1);return;
    case 2: System.out.println(2);return;
    case 3: System.out.println(3);return;
    case 4: System.out.println(4);return;
    // default 语句放在第一行也是可以的,效果相同。
    default:System.out.println("default");return; 
}

问:Java7 后开始支持 String,那么是怎么实现的呢?
:通过源码和反编译源码分析可以看出来,Java 是通过使用两个 switch 语句实现这个功能的,先通过 hashcode 和 equals 找到指定的 case,然后通过临时的 byte 再执行相应的内容,本质上 swtich 中支持的值还是原来那几种,只是又给你封装了一个方法而已。

// 源码
String str = "one";
switch (str){
  case "one" :
    System.out.println("one");return;
  case "two" :
    System.out.println("two");return;
}

// 反编译代码
String str = "one";
byte var4 = -1;
switch(str.hashCode()) {
case 110182:
    if (str.equals("one")) {
        var4 = 0;
    }
    break;
case 115276:
    if (str.equals("two")) {
        var4 = 1;
    }
}

switch(var4) {
case 0:
    System.out.println("one");
    return;
case 1:
    System.out.println("two");
    return;
default:
}
    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值