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

452 阅读3分钟
原文链接: mp.weixin.qq.com

欢迎推荐人才赚取三位数以上的佣金,活动规则,只要邀请被推荐人关注公众号点击"面试内推",同时回复他的ID给小A,小A会在被推荐人成功入职后跟你分享佣金。佣金有多少呢?文末有惊喜!下面进入今天的正题。

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

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

"Java的switch能不能判断string"

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

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

"那它是怎么实现的呢"

"这个…没了解过"

面试官微微一笑,

"好的回去等通知吧"

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

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

Java swtich的语法

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

public class JavaSwitch {  public static void switchMethod(int i) {    switch(i) {      case 1:        break;       case 2:        break;       default:        break;    }  }}

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

public class JavaSwitch {  public static void switchMethod(String i) {    switch(i) {      case "Hello":        break;       case "World":        break;       default:        break;    }  }}

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

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,然后再判断的。

请随意转发下图到微信群或朋友圈,内推成功的同学,小A将与你分享4位数的佣金哦,最低也有1000大洋!