During an interview, I was posed an intriguing question about how the Java Virtual Machine (JVM) handles a switch
statement involving a String
type. Specifically, I was asked whether the JVM employs LookupSwitch
or TableSwitch
for this operation. My initial thought was that it would utilize LookupSwitch
due to the sparsity of String
hashcodes. However, the interviewer added a layer of complexity by asking: "How does the JVM handle hash collisions when two different cases have the same hashcode?"
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"));
}
}
Can you help clarify how the JVM navigates through switch cases involving String
objects, especially when hash collisions are involved?
For the first part question, I found I'm wrong here. the compiler has to pick either, a lookupswitch or tableswitch instruction