Java 语法糖 - switch 匹配字符串
Java 评论 1 大约 2286 字本质
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");
}
}
}
}
阅读 2188 · 发布于 2022-04-24
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
-
fHLvlxbf 1楼
e
Chrome | Windows 10 2023-07-24
随便看看
换一批
-
Linux 增加 Swap 交换分区解决内存不足阅读 2612
-
macOS locate 命令报错解决方法阅读 222
-
Linux awk 命令简单使用阅读 1958
-
MySQL 性能优化之 explain type 字段阅读 1574
-
Nginx 配置之解决 413 错误(Request Entity Too Large)阅读 5573
-
JMeter 更改报告中的时间戳格式阅读 2024
-
软考-系统架构设计师:结构化设计阅读 2590
-
Oracle 数据库连接异常 ORA-28000: the account is locked阅读 3736
-
Java 并发编程之 AtomicReference阅读 1096
-
Tomcat acceptCount 和 maxConnections 参数解析阅读 2368