在一次采访中,有人向我提出了一个有趣的问题,即 Java 虚拟机 (JVM) 如何处理涉及
switch
类型的 String
语句。具体来说,我被问到 JVM 是否使用 LookupSwitch
或 TableSwitch
来执行此操作。我最初的想法是,由于 LookupSwitch
哈希码的稀疏性,它将利用 String
。然而,面试官又增加了一层复杂性,他问:“当两个不同的情况具有相同的哈希码时,JVM 如何处理哈希冲突?”
class Solution {
static int switchString(String i) {
int res;
switch (i) {
case "A": // hashcode 65
res = 0;
break;
case "FB": // hashcode 2236
res = 1;
break;
case "Ea": // hashcode 2236
res = 2;
break;
default:
res = 3;
}
return res;
}
public static void main(String[] args) {
System.out.println(switchString("Ea"));
}
}
您能否帮助阐明 JVM 如何在涉及
String
对象的 switch case 中导航,特别是在涉及哈希冲突时?
对于第一部分问题,我发现我错了这里。编译器必须选择 lookupswitch 或 tableswitch 指令
我不会声称自己是专家,但我同意您对
LookupSwitch
的评估 - 关于哈希冲突,我想这可以通过 equals()
方法解决。