欢迎推荐人才赚取三位数以上的佣金,活动规则,只要邀请被推荐人关注公众号点击"面试内推",同时回复他的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大洋!