Java 语法糖 - switch 匹配字符串
Java About 2,286 words本质
switch
匹配字符串本质是先通过比较输入字符串的hashCode
和分支条件对应的字符串的hashCode
是否相同,相同再使用equals
比较字符串是否相同。
取得的临时int
类型后,再使用switch
匹配临时变量的值。
结论:先switch
匹配int
类型字符串hashCode
,再switch
匹配int
类型临时变量。
面试题
问:为什么先hashCode
再equals
?
答:防止哈希冲突。
示例一
Java 代码
public class Test6 {
public void choose(String keywords) {
switch (keywords) {
case "hello":
System.out.println("h");
break;
case "world":
System.out.println("w");
break;
default:
System.out.println("default");
}
}
}
反编译 class
public class Test6 {
public Test6() {
}
public void choose(String keywords) {
byte var3 = -1;
switch(keywords.hashCode()) {
case 99162322:
if (keywords.equals("hello")) {
var3 = 0;
}
break;
case 113318802:
if (keywords.equals("world")) {
var3 = 1;
}
}
switch(var3) {
case 0:
System.out.println("h");
break;
case 1:
System.out.println("w");
break;
default:
System.out.println("default");
}
}
}
示例二
示例二中字符串BM
和C.
的两个hashCode
相同,所以进入同一分支,再进行equals
判断。
Java 代码
public class Test7 {
public void choose(String keywords) {
switch (keywords) {
case "BM":
System.out.println("BM");
break;
case "C.":
System.out.println("C.");
break;
default:
System.out.println("default");
}
}
反编译 class
public class Test7 {
public Test7() {
}
public void choose(String keywords) {
byte var3 = -1;
switch(keywords.hashCode()) {
case 2123:
if (keywords.equals("C.")) {
var3 = 1;
} else if (keywords.equals("BM")) {
var3 = 0;
}
default:
switch(var3) {
case 0:
System.out.println("BM");
break;
case 1:
System.out.println("C.");
break;
default:
System.out.println("default");
}
}
}
}
Views: 3,117 · Posted: 2022-04-24
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...