问题描述
Java 的 switch 语句在底层是如何工作的?它如何将正在使用的变量的值与案例部分中给出的值进行比较?它是使用 == 还是 .equals(),还是完全是别的东西?
How does Java's switch statement work under the hood? How does it compare the value of the variable being used, to those given in the case parts? Does it use == or .equals(), or is it something else entirely?
我主要对 1.7 之前的版本感兴趣.
I'm mainly interested in the pre 1.7 versions.
推荐答案
两者都没有. 它使用 lookupswitch JVM指令,本质上是查表.看一下下面例子的字节码:
Neither. it uses the lookupswitch JVM instruction, which is essentially a table lookup. Take a look at the bytecode of the following example:
public static void main(String... args) { switch (1) { case 1: break; case 2: break; } } public static void main(java.lang.String[]); Code: Stack=1, Locals=1, Args_size=1 0: iconst_1 1: lookupswitch{ //2 1: 28; 2: 31; default: 31 } 28: goto 31 31: return