二话不说,先看一段demo:
public class Demo { public static void main(String[] args) { String name = "王小五"; switch (name){ case "王小二": System.out.println("我是王小二"); break; case "王小五": System.out.println("我是王小五"); break; default: System.out.println("hhhh"); } } } //这个输出的结果是我是王小五那么为什么会实现这个呢?底层到底是什么呢?
带着这两个问题我们来看一下,想要很好的理解,我们来反编译一下这段程序,如下:
public class Demo { public Demo() { } public static void main(String[] args) { String name = "王小五"; byte var3 = -1; switch(name.hashCode()) { case 29176104: if (name.equals("王小二")) { var3 = 0; } break; case 29176112: if (name.equals("王小五")) { var3 = 1; } } switch(var3) { case 0: System.out.println("我是王小二"); break; case 1: System.out.println("我是王小五"); break; default: System.out.println("hhhh"); } } }我相信通过反编译,大家都很清楚了吧,switch里面是name.hashCode(),得出对应的哈希值,那么下面case比较的就是哈希值了,这样就实现了这个新特性,这个新特性从jdk1.7就开始可以使用,底层的原理就是这个了。