前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >想知道switch是怎么判断条件的吗

想知道switch是怎么判断条件的吗

作者头像
PhoenixZheng
发布2018-08-07 16:39:50
7810
发布2018-08-07 16:39:50
举报
文章被收录于专栏:Phoenix的Android之旅

有一天,小A的朋友小呼面试回来,愁眉不展。

"难道面试不顺利?"小A心想。于是问小呼都问了什么。小呼说,面试官问了个奇怪的问题,

"Java的switch能不能判断string"

小呼当时就内心一喜,这不是明摆着的问题嘛!

"当然可以,java7就可以了"

"那它是怎么实现的呢"

"这个…没了解过"

面试官微微一笑,

"好的回去等通知吧"

"然后我就一直在想这个问题了",小呼说

"其实啊,你听我说…",于是小A跟小呼解释了起来

Java swtich的语法

大家都知道switch可以用在于条件判断,但是在java7之前都只能接受byte short int char,就像下面这样

代码语言:javascript
复制
public class JavaSwitch {
  public static void switchMethod(int i) {
    switch(i) {
      case 1:
        break;
       case 2:
        break;
       default:
        break;
    }
  }
}

Java7之后我们可以用String来进行判断了

代码语言:javascript
复制
public class JavaSwitch {
  public static void switchMethod(String i) {
    switch(i) {
      case "Hello":
        break;
       case "World":
        break;
       default:
        break;
    }
  }
}

那么当它比较的时候是对字符串进行比较的吗?其实不是的,我们看下编译后的字节码就明白

代码语言:javascript
复制
public static void switchMethod(java.lang.String);
   Code:
      0: aload_0
      1: astore_1
      2: iconst_m1
      3: istore_2
      4: aload_1
      5: invokevirtual #2                  // Method java/lang/String.`hashCode:()`I
      8: lookupswitch  { // 2
             69609650: 36
             83766130: 50
              default: 61
         }
     36: aload_1
     37: ldc           #3                  // String Hello
     39: invokevirtual #4                  // Method java/lang/String.`equals`:(Ljava/lang/Object;)Z
     42: ifeq          61
     45: iconst_0
     46: istore_2
     47: goto          61
     50: aload_1
     51: ldc           #5                  // String World
     53: invokevirtual #4                  // Method java/lang/String.`equals`:(Ljava/lang/Object;)Z
     56: ifeq          61
     59: iconst_1
     60: istore_2
     61: iload_2
     62: lookupswitch  { // 2
                    0: 88
                    1: 91
              default: 94
         }
     88: goto          94
     91: goto          94
     94: return
}

我们只需要注意到Sting的hashCode,还有equals方法,就能明白。进行判断的时候,首先把case里的比较条件转换成hashCode,同样的传进来的String也被转换成hashCode, 然后再进行条件判断。所以其实switch对String的判断原理,也是通过整型进行判断的。

总结

switch的判断,其实是对整型的判断。Java7中新增的对String的支持,实际上是先将String进行hashCode,然后再判断的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android每日一讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java swtich的语法
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档